标签:linux
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选项的作用是只显示我们要打印的行,无关紧要的内容不显示。
1.1.2 打印所有行 命令:sed -n '1,$'p passwd
1.1.3 指定一个区间打印 命令:sed -n '1,3'p passwd
2.1 打印包含某个字符串的行
命令:sed -n '/root/'p passwd
类似于grep了,在grep中使用的特殊字符(如^、$、.、* 等)同样也能在sed中使用
2.1.1 打印以1开头的行 命令:sed -n '/^1/'p passwd
2.1.2 打印以in结尾的行 命令:sed -n '/in$/'p passwd
2.1.3 打印r和o之前有两个任意符的行 命令:sed -n '/r..o/'p passwd
2.1.4 打印有零个或者多个ooo的行 命令:sed -n '/ooo*/'p passwd
3. -e 可以实现多个行为
命令:sed -e ‘1’p -e ‘/111/’p -n passwd 或
sed -e ‘1p;/111/p’ -n passwd
4、删除某行或者多行 (这里的参数d表示删除的动作,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行。不过,这个操作仅仅是在显示器屏幕上并不显示这些行而已,文档本身是没有做删除动作,不用担心。)
命令:sed '1'd passwd 或sed '1,3'd passwd
5、替换字符或字符串
命令:sed '1,2s/ot/to/g' passwd \\把第一二行ot替換成to
(‘s’ 就是替换的命令, ‘g’ 为本行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个)
5.1 可以使用 ‘/’ 作为分隔符外,还可以使用其他特殊字符
例如 ‘#’ 或者 ‘@’ 都是可以的,命令: sed '1,2s#ot#to#g' passwd
5.2 文档中所有字母或者数字替换成空 (删除文档中所有的数字或字母)
解释:[0-9]表示任意的数字,[a-zA-Z]表示所有的大小写字母或者[0-9a-zA-z]所有数字和字母
命令:sed 's/[a-zA-Z]//g' passwd 或者sed 's/[0-9]//g' passwd
6.调换两个字符串的位置
命令:sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/'
小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则写成类似\1、\2、或\3的形式。上例中用()把想要替换的字符打包成了一个整体。
有这个转义字符\,会让这个表达式看起来乱槽槽的,可以换一种方式省略它,如下所示
命令:sed -r 's/(rot)(.*)(bash)/\3\2\1/' passwd (可以省略脱义符\)
就是加了这个-r选项让这个表达式更加清晰了
6.1 除了调换两个字符串的位置,还可以使用sed在某一行前后增加指定内容,如下所示:
命令:sed 's/^.*$/123&/' passwd
7、直接修改文件的内容 (提前做好备份)
命令:sed -i 's/ot/to/g' passwd
这样可以直接把文件修改,所以在修改前做好备份,最好先复制一下文件以免改错
标签:linux
原文地址:http://blog.51cto.com/404006045/2108262