前面已经学习过替换文件内容了,本文我们学习一些更频繁使用的搜索替换操作.
示例文件使用:
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