4月26日

9.4-9.5 sed

其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换,以前用vim操作文档的时候,可以查找也可以替换,但只限于在文本内部操作,而不能输出到屏幕上,sed工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能。sed是流式编辑器,是针对文档的行来操作的。

常用选项: 

-n:把经过sed命令处理的行输出到屏幕 

-e:允许对输入数据应用多条sed命令编辑 

-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出 

-a:追加,在当前行后添加一行或多行 

-c:行替换,用c后面的字符串替换原数据行 

-i:插入,在当期行前插入一行或多行 

-d:删除,删除指定的行 

-p:打印,输入指定的行 

-s:字串替换,用一个字符串替换另外一个字符串。格式为行范围s/旧字串/新字串/g”

 

1.1 打印某行 

 命令格式:sed -n 'n' p filesname

解释:单引号内的n是一个数字,表示第几行,-n选项的作用是只显示我们要打印的行,无关紧要的内容不显示。

blob.png 

1.1.2 打印所有行 命令:sed -n '1,$'p passwd

blob.png 

1.1.3 指定一个区间打印 命令:sed -n '1,3'p passwd

blob.png 

2.1 打印包含某个字符串的行

命令:sed -n '/root/'p passwd

blob.png 

类似于grep了,在grep中使用的特殊字符(如^$.* 等)同样也能在sed中使用

2.1.1 打印以1开头的行 命令:sed -n '/^1/'p passwd   

blob.png 

2.1.2 打印以in结尾的行 命令:sed -n '/in$/'p passwd

blob.png 

2.1.3 打印ro之前有两个任意符的行 命令:sed -n '/r..o/'p passwd

blob.png 

2.1.4 打印有零个或者多个ooo的行 命令:sed -n '/ooo*/'p passwd

blob.png 

3. -e 可以实现多个行为 

命令:sed -e ‘1’p -e ‘/111/’p -n passwd  

            sed -e ‘1p;/111/p’ -n passwd 

blob.png 

4、删除某行或者多行 (这里的参数d表示删除的动作,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行。不过,这个操作仅仅是在显示器屏幕上并不显示这些行而已,文档本身是没有做删除动作,不用担心。)

命令:sed '1'd passwd sed '1,3'd passwd

blob.png 

 

blob.png 

5、替换字符或字符串 

命令:sed '1,2s/ot/to/g' passwd   \\把第一二行ot替換成to

 (‘s’ 就是替换的命令, ‘g’ 为本行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个)

blob.png 

5.1 可以使用 ‘/’ 作为分隔符外,还可以使用其他特殊字符

例如 ‘#’ 或者 ‘@’ 都是可以的,命令: sed '1,2s#ot#to#g' passwd

blob.png 

5.2 文档中所有字母或者数字替换成空 删除文档中所有的数字或字母

解释:[0-9]表示任意的数字,[a-zA-Z]表示所有的大小写字母或者[0-9a-zA-z]所有数字和字母

命令:sed 's/[a-zA-Z]//g' passwd 或者sed 's/[0-9]//g' passwd

blob.png 

 

blob.png 

6.调换两个字符串的位置 

命令:sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/'

小括号sed中属于特殊符号,必须在前面加转义字符\,替换时则写成类似\1\2、或\3的形式。上例中用()把想要替换的字符打包成了一个整体。

有这个转义字符\,会让这个表达式看起来乱槽槽的,可以换一种方式省略它,如下所示

命令:sed -r 's/(rot)(.*)(bash)/\3\2\1/' passwd (可以省略脱义符\)

blob.png 

就是加了这个-r选项让这个表达式更加清晰了

blob.png 

6.1 除了调换两个字符串的位置,还可以使用sed某一行前后增加指定内容,如下所示:

命令:sed 's/^.*$/123&/' passwd

blob.png 

7、直接修改文件的内容 (提前做好备份)

命令:sed -i 's/ot/to/g' passwd

blob.png 

这样可以直接把文件修改,所以在修改前做好备份,最好先复制一下文件以免改错

 



猜你喜欢

转载自blog.51cto.com/404006045/2108262