前面已经学习过替换文件内容了,本文我们学习一些更频繁使用的搜索替换操作.

示例文件使用:

1.替换每行开始的两个字母,这里用XX来替换

s代表substitute,前面说过了,^用来匹配行开头,.表示任意一个字符,两个..就是你懂的,

其实,不要^符号也是可以的,因为默认就是从开头开始匹配,如下也可以实现

2.删除每行开头的两个字符

看到没有,后两个斜线之间没有内容,也就是用空字符来替换开头的两个字符,就实现了删除

3.要是想删除每行最后的两个字符呢

再次强调,$在不同的情况下表示不同的意思,这里匹配行尾,有时候也匹配文件尾部

4.向每行末尾添加内容

这里,先匹配行尾,然后把".Rs"添加到行尾

5.在每行开头添加空格

还记得前面说过的么,sed默认不影响原始文件,要是想更新原始文件,请加-i参数

6.移除开始的空格

^匹配行首,然后是一个空格,然后是*,表示一个或多个空格嘛,然后替换为空字符

7.移除行首和行尾的空格

不要怕,从分号处分开,就是两条命令啦,一个做行首的,一个做行尾的,前面说过的,可以使用-e参数来分开

8.如何在一个字符串前后添加一些其他字符呢,可以用来字符串转义

前两个斜线匹配了所有字符,也就是本行,然后后面两个斜线是替换的内容,注意里面的&符号,之前也说过的,表示匹配到的字符,也就是本行了。所有就这样啦

9.移除行首和行尾的一个字符(多个你也会的啦)

分开看看,你可以的

10.删除第一个数字之前的所有字符

这条命令略复杂,请先回头看一下我们的示例文件,然后我们开始分析这个表达式,地一个^表示匹配行首,然后[^0-9]* 是一个典型的正则,匹配非数字的多个字符,简单说一下[0-9]表示匹配0,1,2,3,4,5,6,7,8,9任意一个字符,前面加个一个^,表示非,也就是不匹配这些数字,然后最后是一个*,表示匹配非数字的连续多个字符,有机会的话我会推荐一个正则系列,或者自己写一篇文章。这里就先这样理解吧。

那猜猜这个是干嘛的

是的,你猜对了,删除开头的所有非字母字符。

11.删除行尾的数字

看看前面的你就知道了

12.通过分隔符得到文件最后一列

可能你你预想的不一样,是不是,你可能认为会是第一列被删除,其他的列都在,不对的,sed是很贪心的,当我们指定'.*:‘时,他会一直向后查找,尽量匹配更多,所以,就匹配到最后一个列之前了

13.转换整行字符为小写

\L是sed的一个命令,Lowercase嘛。\L之后的内容被毁转换,而&表示前面匹配道德内容,所以就实现了转换

14.转换大写

\U你懂的,Uppercase