- grep命令还不够强大,它只能用于查找,而不能进行替换。这里就需要用到sed以及awk命令了,他们能把替换的文本输出到屏幕上,而且还有其他丰富的功能。它们都是流式编辑器。是针对文本的行来进行操作的。
(1) 打印出包含指定字符串的行
sed -n '/root/'p test.txt //打印出包含root的行
(2)同时也是支持.
或者*
和+
的
sed -nr '/o+t/'p test.txt等于 sed -n '/o\+/'p test.txt
(3)指定要过滤出 的字符出现的次数。
sed -nr '/o{2}/'p test.txt
(4)过滤出字符串1或者字符串2
sed -nr '/root|var/'p test.txt
或者使用-e选项,效果是一样的
sed -e '/root/'p -e '/var/'p -n test.txt
如果2个要求都满足,那么会打印2次。
(5)打印指定的行
sed -n '3'p test.txt //需要打印第几行就写数字几, -n选项的作用就是只打印我们需要的那行,其他的不显示。
如果是打印多行可用,隔开 。例:
sed -n '3,8'p test.txt //打印第3行到第8行
sed -n '3,$'p test.txt //打印第3行到最后一行。
(6)其他应用
sed -n '/^s/'p test.txt //打印出以s开头的行。
sed -n '/in$/'p test.txt //打印出以in结尾的行
sed -n '/.+root.+/'p test.txt //打印出root字符串在行中间的行。
(7)匹配时不区分大小写
sed -n '/var/'Ip test.txt //匹配var字符串,不区分大小写。且I不能跟在-n后面
(8)删除指定的行
sed '3'd test.txt //删除第3行,但是并不会删除真实文件的内容,这里只是不显示出来而已。
要删除真实文件的内容,可以加上-i选项。
sed -i '1,15'd test.txt
(9)指定性删除
sed -i '/home/'d test.txt //删除包含home字符串的行。
- 替换字符串,与vim中的替换方式很类似。
(1)sed '1,5s/root/toor/g test.txt //将文件中第一到第五行中所有出现的root替换为toor
(2)
sed -r '1,5s/ro+/b/g' test.txt //将1-5行中的ro+替换为b ,加上-r选项就可以不使用转义字符。
(3)也可以写成这样
sed 's@/sbin/nologin@315@g' test.txt
(4)删除所有的英文字母
head test.txt |sed 's/[a-zA-Z]//g' //将所有的英文字母删除,也就是替换为空。
- 调换2个字符的位置
head |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' //sed命令支持管道符,使用小括号把要替换的字符打包成一个整体。
- 在某行前添加指定内容。
sed 's/^.*$/123&/' test.txt //文件中所有行的行首添加123字符。这里的&表示(^.*$/)