sed 命令
linux 下的一个编辑命令 跟grep awk 一起成为linux 三剑客。
sed 全称 Stream EDitor(流之编辑)
sed的两种命令
- sed [options] 'command' file(s)
- sed [options] -f scriptfile file(s)
- 1定位
- sed '1,3d' 删除第一到第三行。单引号是必须的。最后一行 是$d
- sed '4,$d' test.txt 从第四行开始 一直删到文件结尾
a
- sed ‘2a pear’ 从第三行加上 pear 字样
-
- i
- sed '2i bingtang' 在第二行前 加上bingtang
- 加两行字 是
- sed '2a bingtang ......\
- >pear'
- 每一行之间都要添加【\】
- 2 以行为单位的替换与显示。
- 参数 c
- sed '2,5c I love bingtang xueli' 将2-5行的内容取代成 I love bingtang xueli
- -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
- -p
- 列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- sed -n "3,5p" test.txt 仅仅列出 3-5行
- sed "/root/p" 打印有root关键字的行
- sed '/root/d' 删除带有root关键字的行
- 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' 1 root:x:0:0:root:/root:/bin/blueshell
如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 1 root:x:0:0:root:/root:/bin/blueshell
-
- 删除第三行到末尾的数据,并把bash替换为blueshell
- sed -e '3,$d' -e 's/bash/blueshell/'
- 直接修改文件内容
sed -i 's/\.$/\!/g' regular_express.txt
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!
sed -i '$a # This is a test' regular_express.txt