Linux下的常用工具awk与sed可以做与字符串相关的很多操作。Bash内置了一些字符串的操作功能,使用内置操作可以省掉启动外部程序的时间,速度会更快,见表4-5。
表4-5 字符串操作
例如,看看morning这个字符串的长度:
从morning这个字符串的第0个字符开始取子字符串,就是它本身:
分别从第1个字符和第5个字符开始取子字符串:
从第2个字符开始取长度为3的子字符串:
表4-5中的regexp是一个正则表达式,而不是普通的字符串,看下面的例子就明白了。
*代表零个或者多个字符,对于字符串morning而言,m*n可以匹配morn,也可以匹配mornin。从字符串morning的开头,删除最短匹配m*n的子串,也就是删除morn,得到ing:
从字符串morning的开头,删除最长匹配m*n的子串,也就是删除mornin,得到g:
从字符串morning的结尾,删除最短匹配n*g的子串,也就是删除ng,得到morni:
从字符串morning的结尾,删除最长匹配n*g的子串,也就是删除ning,得到mor:
由上可知,井号(#)“控制着”字符串的开头(左边),百分号(%)“控制着”字符串的尾部(右边)。这不太容易记住,有时候会记反。这里提供一种记忆方法:#看上去像两个+错开放在一起,数的正号负号都是放在开头,如,+78;而写百分比时,%都是放在结尾,如,96%。或者看看键盘,#键在左边,%键在#的右边。
下面介绍#和%的应用,看一个“掐头去尾”的例子。已知一个文件的全路径,如,/usr/bin/zip,如果只想知道文件名zip本身,从头开始匹配,*/最长可以匹配/usr/bin/(其中,*匹配/usr/bin,/匹配bin后边的斜杠),“掐头”后,剩下zip:
(www.xing528.com)
如果只想知道文件的路径,从后面开始匹配,/*最短可以匹配/zip(其中,/匹配zip前面的斜杠,*匹配zip),“去尾”后,剩下/usr/bin:
上面的“掐头去尾”只是例子。实际工作中,几乎都使用basename和dirname这一对命令来得到文件名和文件的路径,顺便在这里介绍一下它们。命令basename的输入参数为一个带路径的文件时,输出为文件名本身,如:
命令dirname的输入参数为一个带路径的文件时,输出为其路径,如:
下面介绍表4-5中最后四行的内容。
给str重新赋值,mo重复了三次:
把第一个mo替换为xyz:
把所有的mo替换为xyz:
m*i匹配momomorni,把字符串前面的匹配m*i的部分替换为xyz:
i*g匹配ing,把尾部的匹配i*g的部分替换为xyz:
因为mo不在字符串momomorning的尾部,所以下面的操作不能做任何替换,得到的字符串与原字符串相同:
表4-5的其他操作用在数组上的话,就是对每个数组元素进行同样的处理。例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。