六周第二次课(4月26日)笔记

9.4/9.5 sed


sed -n '/ /'p  xxx.txt 会打印出匹配行,如果不加n会把文件所有内容打印出来,且匹配行打印2次


在sed中加-nr可以免去使用脱义符\如下图所示



sed可以使用或"|"筛选,字符{number},其中number表示前面字符重复出现的次数,打印某行加上相应数字,尾行用"$"符号




使用-e执行多个操作


由于操作是相互独立的,即使前面和后面有重叠,也同时打印出来


sed -n '/bus/'p test.txt 显示带关键字bus的行(如果只有大写不能显示)

sed -n '/bus/'Ip test.txt 显示带bus的行(不区分大小写)


使用sed可以删除指定时间内的文件: ① grep -n 找到指定行

                                                       ② sed '1,n'd  xxx.txt删除文件前n行并在屏幕上打印出来(保留文件本身),如果加上-i则会删除文件中的n行


sed也可以删除以某字符为开头的行,如sed -i '/usr2/'d test.txt.bak



sed的替换功能

sed '1, ns/替换字符/被替换字符/g' xxx.txt


sed支持管道符操作,

需求: 把文件test.txt中的前十行每一行的第一部分和最后一部分相互替换(以冒号为分隔符)

分析:想要把第一段和最后一段对调,定义好'/s/主体/替换体/'即可,

先写主体:

([^:]+):(.*):([^:]+) →→→第二部分xx.*xx为正则贪婪匹配 

替换体:

因为后面需要调用,所以主体中的每一部分字符都需要用(),可以看成1:/2:/3,替换对应为\3:\2:\1 

使用()要加-r脱义;故最终结果为: sed -r '/([^:]+):(.*):([^:])/\3\:2:\1/' |

补充:正则表达式的贪婪和懒惰匹配

例:一个字符串“abcdakdjd”

regex="a.*?d";    懒惰匹配

regex2="a.*d";   贪婪匹配


* 一定要加脱义符,否则系统认定只是数字3替换第一行,而原来主体的第三部分([^:+])被架空

如果替换主体中有多个/,系统会无法识别,需要加反斜杠\脱义,或者用其他字符代替


sed 's/[a-zA-Z]//g'把文档中所有的字母去掉


sed -r '/s/(.*)/aaa:&/' &表示前面的(.*)或者用1\


猜你喜欢

转载自blog.csdn.net/fuel91/article/details/80102704
今日推荐