1,插入子串
插入子串:就是在指定的位置插入子串,这个位置可能是某个子串的位置,也可能是从某个文件开头算起的某个长度。
公式:插入子串=把"old子串"替换成"old子串+new子串"或者"new子串+old子串"
例子:下面在var字符串的空格之前或之后插入一个下划线
// 用{}
$ var="get the length of me"
$ echo ${var/ /_ } #在指定字符串之前插入一个字符串
get_ the length of me
$ echo ${var// /_ }
get_ the_ length_ of_ me
$ echo ${var/ / _} #在指定字符串之后插入一个字符串
get _the length of me
$ echo ${var// / _}
get _the _length _of _me
// 其他的还用演示么?这里主要介绍sed怎么用来插入字符吧,因为它的标签功能很有趣
$ echo $var | sed -e 's/( )/_1/' #(和)将不匹配到的字符串存放为一个标签,按匹配顺序为1,2...
get_ the length of me
$ echo $var | sed -e 's/( )/_1/g'
get_ the_ length_ of_ me
$ echo $var | sed -e 's/( )/1_/'
get _the length of me
$ echo $var | sed -e 's/( )/1_/g'
get _the _length _of _me
// 看看sed的标签的顺序是不是1,2....,看到没?2和1掉换位置后,the和get的位置掉换了
$ echo $var | sed -e 's/([a-z]*) ([a-z]*) /2 1 /g'
the get of length me
// sed还有专门的插入指令,a和i,分别表示在匹配的行后和行前插入指定字符
$ echo $var | sed '/get/a test'
get the length of me
test
$ echo $var | sed '/get/i test'
test
get the length of me
2.5. 删除子串
删除子串:应该很简单了吧,把子串替换成“空”(什么都没有)不就变成了删除么。还是来简单复习一下替换吧。
例子:把var字符串中所有的空格给删除掉。
如果要删除掉第一个空格后面所有的字符串该怎么办呢?还记得{}的#和%用法么?
实际上删除子串和取子串未尝 不是两种互补的运算呢,删除掉某些不想要的子串,也就同时取得另外那些想要的子串——这个世界就是一个“二元”的世界,非常有趣)
2.6. 子串比较
这个很简单:还记得test命令的用法么?man test。它可以用来判断两个字符串是否相等的。另外,你发现了“字符串是否相等”和“字符串能否跟另外一个字符串匹配"两个问题之间的关系吗?如果两个 字符串完全匹配,那么这两个字符串就相等了。所以呢,上面用到的字符串匹配方法,也同样可以用到这里。
2.7. 子串排序
差点忘记这个重要的内容了,子串排序可是经常用到的,常见的有按字母序、数字序等正序或反序排列。
sort命令可以用来做这个工作,它和其他行处理 命令一样,是按行操作的。
有关sort命令的用法,可参考:
shell中sort、uniq、cut、paste和split用法详解
linux sort排序命令的高级用法(按多个列值进行排列)
另外,它类似cut和awk,可以指定分割符,并指定需要排序的列。
2.7. 子串进制转换
如果字母和数字字符用来计数,那么就存在进制转换的问题。
说明:ibase指定输入进制,obase指出输出进制,这样通过调整ibase和obase,你想怎么转就怎么转啦!
2.7. 子串编码转换
字符编码通常是指把一序列”可打印“字符转换成二进制表示,而字符解码呢则是执行相反的过程,如果这两个过程不匹配,则出现了所谓的”乱码“。
编码转换。
在linux下,可以使用iconv这个工具来进行相关操作。
在windows下常用的汉字编码是gb2312,而在linux下则大多采用utf8。
说明:当前终端默认编码是utf8。