shell 字符串截取
来源:互联网 发布:java网络编程视频教程 编辑:程序博客网 时间:2024/06/03 22:57
第一种方法:
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
"*"只是一个通配符可以不要
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg
在第一个例子中,输入了 ${MYVAR##*fo}。它的确切含义是什么?基本上,在 ${ } 中输入环境变量名称,两个 ##,然后是通配符 ("*fo")。然后,bash 取得 MYVAR,找到从字符串 "foodforthought.jpg" 开始处开始、且匹配通配符 "*fo" 的 最长 子字符串,然后将其从字符串的开始处截去。刚开始理解时会有些困难,为了感受一下这个特殊的 "##" 选项如何工作,让我们一步步地看看 bash 如何完成这个扩展。首先,它从 "foodforthought.jpg" 的开始处搜索与 "*fo" 通配符匹配的子字符串。以下是检查到的子字符串:
f
fo MATCHES *fo
foo
food
foodf
foodfo MATCHES *fo
foodfor
foodfort
foodforth
foodfortho
foodforthou
foodforthoug
foodforthought
foodforthought.j
foodforthought.jp
foodforthought.jpg
在搜索了匹配的字符串之后,可以看到 bash 找到两个匹配。它选择最长的匹配,从初始字符串的开始处除去,然后返回结果。
上面所示的第二个变量扩展形式看起来与第一个相同,但是它只使用一个 "#" -- 并且 bash 执行 几乎同样的过程。它查看与第一个例子相同的子字符串系列,但是 bash 从初始字符串除去 最短 的匹配,然后返回结果。所以,一查到 "fo" 子字符串,它就从字符串中除去 "fo",然后返回 "odforthought.jpg"。
这样说可能会令人十分困惑,下面以一简单方式记住这个功能。当搜索最长匹配时,使用 ##(因为 ## 比 # 长)。当搜索最短匹配时,使用 #。看,不难记吧!等一下,怎样记住应该使用 '#' 字符来从字符串开始部分除去?很简单!注意到了吗:在美国键盘上,shift-4 是 "$",它是 bash 变量扩展字符。在键盘上,紧靠 "$" 左边的是 "#"。这样,可以看到:"#" 位于 "$" 的“开始处”,因此(根据我们的记忆法),"#" 从字符串的开始处除去字符。您可能要问:如何从字符串末尾除去字符。如果猜到我们使用美国键盘上紧靠 "$" 右边 的字符 ("%),那就猜对了。这里有一些简单的例子,解释如何截去字符串的末尾部分:
$ MYFOO="chickensoup.tar.gz"
$ echo ${MYFOO%%.*}
chickensoup
$ echo ${MYFOO%.*}
chickensoup.tar
正如您所见,除了将匹配通配符从字符串末尾除去之外,% 和 %% 变量扩展选项与 # 和 ## 的工作方式相同。请注意:如果要从末尾除去特定子字符串,不必使用 "*" 字符:
MYFOOD="chickensoup"
$ echo ${MYFOOD%%soup}
chicken
在此例中,使用 "%%" 或 "%" 并不重要,因为只能有一个匹配。还要记住:如果忘记了应该使用 "#" 还是 "%",则看一下键盘上的 3、4 和 5 键,然后猜出来。
第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
第三种方法:
在文件test.txt中数据: 1234 5678 在shell中截取a=1234 b=5678
a=$(awk -F' ' 'print $1' test.txt)
b=$(awk -F' ' 'print $2' test.txt)
echo $a
1234
echo $b
5678
awk 应用请参考我的下载文献
- shell字符串的截取
- Shell 字符串截取方法
- shell字符串的截取
- shell 字符串截取
- shell 字符串的截取
- shell字符串的截取
- shell字符串的截取
- shell 截取字符串
- shell中 字符串截取
- Shell脚本截取字符串
- ---Shell字符串的截取
- shell截取字符串
- shell字符串的截取
- shell字符串的截取
- Shell字符串截取
- shell字符串的截取
- shell 字符串截取
- shell 字符串截取
- Spring中ref local与ref bean区别
- 【RFB】Linux uinput 分析,虚拟鼠标,键盘
- android中的布局(四) 图片在手机上显示出现乱条纹的 问题
- 使用AsyncTask下载远端资源到SD卡
- 格式工厂 2.95
- shell 字符串截取
- Android:指定分辨率和清晰度的图片压缩方法源码
- 让编程不再迷茫--java编程入门
- 《痞子英雄》双雄特辑 赵又廷黄渤疯狂互虐
- 从另一个线程将recvfrom从阻塞状态唤醒
- MyEclipse 8.5 性能优化
- in,exists和not exists ,not in与null的一些关系记载
- Hibernate MySql 中文乱码解决办法
- 彭浩翔《醉后一夜》:华语片缺故事不缺钱