标签:sed
sed 是一种行编辑器,一次处理一行内容,处理时把当前处理的行存储在一个临时缓冲区,称为“模式空间”(pattern space),接着用sed命令处理模式空间中的内容,处理完成后把模式空间中的内容打印到屏幕上,完成一行的编辑。
注:默认情况下sed并不做原地修改,不会修改源文件
sed有两种使用方法
sed [options] command file(s) 直接编写处理命令处理
sed [options] -f scriptfile file(s) 使用预先编写好的sed脚本处理
options:
-n 静默模式,不输出内容到屏幕
-e 多点编辑,一次编辑运行多个编辑命令
-f 指定预先写好的sed‘脚本
-r 使用扩展的正则表达式
-i 修改源文件
地址定界
1、不给地址:对全文进行处理
2、单地址:
#:第#行
/pattrern/:被此处模式匹配到的每一行
3、地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
4、~ 步进
sed -n ‘1~2p‘ file 显示基数行
sed -n ‘2~2p‘ file 显示偶数行
[root@makeISO mage]# cat 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ 99 1 X 1 = 1 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 [root@makeISO mage]# sed -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ -e ‘/^9/p‘ 99 1 X 1 = 1 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed -i -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ -e ‘/^9/p‘ 99 [root@makeISO mage]# cat 99 1 X 1 = 1 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed -n ‘1~2p‘ 99 1 X 1 = 1 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed -n ‘2~2p‘ 99 2 X 1 = 2 2 X 2 = 4 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64
编辑命令:
d: 删除
cat -n /etc/passwd |sed ‘1,8d‘ 删掉第1-8行
sed ‘/^$/d‘ /etc/fstab 删掉空行
sed ‘/^#/d‘ /etc/fstab 删掉#开头的行
[root@makeISO mage]# sed ‘3,9d‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 [root@makeISO mage]# sed -e ‘/^1/d‘ -e ‘/^3/d‘ -e ‘/^5/d‘ -e ‘/^7/d‘ -e ‘/^9/d‘ 99 2 X 1 = 2 2 X 2 = 4 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64
p: 显示模式空间中的内容
cat -n /etc/passwd |sed ‘1,8p‘ 显示全文加匹配到的行
cat -n /etc/passwd |sed -n ‘1,8p‘ 仅显示匹配到的行
sed -n ‘#p‘ 与 sed ‘#d‘ 显示结果正好相反
[root@makeISO mage]# sed -n ‘1,5p‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 [root@makeISO mage]# sed ‘1,5d‘ 99 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
a: \text 在指定行后面追加一行或多行文本(\n)
sed -n ‘/^UUID/a \new line 1‘ /etc/fstab
sed -n ‘/^UUID/a \new line 1\nnew line 2‘ /etc/fstab
[root@makeISO mage]# sed ‘/^5/a newline1‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 newline1 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘/^5/a newline1\nnewline2‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 newline1 newline2 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
i: \text 在指定行前面插入一行或多行文本(\n)
sed -n ‘/^UUID/i \new line 1‘ /etc/fstab
sed -n ‘/^UUID/i \new line 1\nnew line 2‘ /etc/fstab
[root@makeISO mage]# sed ‘/^5/i newline1‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 newline1 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘/^5/i newline1\nnewline2‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 newline1 newline2 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
c: \text 替换指定行尾一行或多行文本(\n)
sed -n ‘/^UUID/c \new line 1‘ /etc/fstab
sed -n ‘/^UUID/c \new line 1\nnew line 2‘ /etc/fstab
[root@makeISO mage]# sed ‘/^5/c newline1‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 newline1 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘/^5/c newline1\nnewline2‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 newline1 newline2 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
w: 保存模式空间中内容到指定文件
sed -n ‘/^UUID/w file‘ /etc/fstab
[root@makeISO mage]# sed -n ‘2~2p‘ 99 2 X 1 = 2 2 X 2 = 4 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 [root@makeISO mage]# sed -n ‘2~2w file‘ 99 [root@makeISO mage]# cat file 2 X 1 = 2 2 X 2 = 4 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64
=: 显示模式空间中行的行号
sed ‘/^UUID/=‘ /etc/fstab
[root@makeISO mage]# sed -n ‘/^5/=‘ 99 5
r: 读取文件到符合匹配条件的每一行后
sed ‘6r file‘ /etc/fstab 读取file内容插入到fstab文件第6行后面
[root@makeISO mage]# cat file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@makeISO mage]# sed ‘^6r file‘ 99 sed: -e expression #1, char 1: unknown command: `^‘ [root@makeISO mage]# sed ‘6r file‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘/^6/r file‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
!: 对地址定界取反
cat -n /etc/passwd |sed ‘1,8!d‘ 删掉第1-8行以外的行
[root@makeISO mage]# sed ‘1~2d‘ 99 2 X 1 = 2 2 X 2 = 4 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 [root@makeISO mage]# sed ‘1~2!d‘ 99 1 X 1 = 1 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
s///: 替换,支持其他分隔符 s@@@ s###
替换标记:
g: 行内全局替换
i: 忽略字符大小写
[root@localhost ~]# sed -n ‘s@r..t@&+++++++++++++@gp‘ /etc/passwd root+++++++++++++:x:0:0:root+++++++++++++:/root+++++++++++++:/bin/bash operator:x:11:0:operator:/root+++++++++++++:/sbin/nologin ftp:x:14:50:FTP User:/var/ft+++++++++++++p:/sbin/nologin
[root@makeISO mage]# sed ‘s/X/*/‘ 99 1 * 1 = 1 2 * 1 = 2 2 X 2 = 4 3 * 1 = 3 3 X 2 = 6 3 X 3 = 9 4 * 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 * 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 * 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 * 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 * 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 * 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘s/X/*/g‘ 99 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 [root@makeISO mage]# sed ‘s/x/*/g‘ 99 1 X 1 = 1 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 [root@makeISO mage]# sed ‘s/x/*/gi‘ 99 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 [root@makeISO mage]# sed ‘s/x/*/i‘ 99 1 * 1 = 1 2 * 1 = 2 2 X 2 = 4 3 * 1 = 3 3 X 2 = 6 3 X 3 = 9 4 * 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 5 * 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 6 * 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 7 * 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 8 * 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 9 * 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
高级命令
h: 把模式空间内容覆盖到保持空间
H: 把模式空间中的内容追加到保持空间
g: 从保持空间中取回内容覆盖到模式空间
G: 从保持空间中取回内容追加到模式空间
x: 包模式空间和保持空间的内容互换
n: 读取匹配到行的下一行覆盖至模式空间
N: 读取匹配到行的下一行追加至模式空间
d: 删除模式空间中的行
D: 删除多行模式空间中的所有行
sed -n ‘n;p‘ file 显示偶数行
[root@localhost ~]# cat -n /etc/passwd | sed -n ‘n;p‘ 2 bin:x:1:1:bin:/bin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 8 halt:x:7:0:halt:/sbin:/sbin/halt 10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
sed ‘1!G;h;$!d‘ file 逆向显示文件内容
[root@localhost ~]# cat qq 1 2 3 4 5 6 [root@localhost ~]# cat qq | sed ‘1!G;h;$!d‘ 6 5 4 3 2 1
sed ‘$!N;$!D‘ file 取文件后两行
[root@localhost ~]# cat qq 1 2 3 4 5 6 [root@localhost ~]# cat qq | sed ‘$!N;$!D‘ 5 6
sed ‘$!d‘ file 取文件最后一行
[root@localhost ~]# sed ‘$!d‘ qq 6 [root@localhost ~]#
sed ‘G‘ file 每行下面添加空白行
[root@localhost ~]# cat qq | sed ‘G‘ 1 2 3 4 5 6 [root@localhost ~]#
sed ‘/^$/d;G‘ file 删除已有空行,然后给每行添加空行
[root@localhost ~]# cat qq 1 2 3 4 5 6 [root@localhost ~]# sed ‘/^$/d;G‘ qq 1 2 3 4 5 6 [root@localhost ~]#
sed ‘n;d‘ file 取基数行
[root@localhost ~]# sed ‘n;d‘ qq 1 3 5 [root@localhost ~]#
sed -n ‘1!G;h;$p‘ file 逆序显示文件内容
[root@localhost ~]# sed -n ‘1!G;h;$p‘ qq 6 5 4 3 2 1 [root@localhost ~]#
练习:
1、删除某文件中以空白开头的行的行首的空白字符
[root@localhost ~]# cat qq 1 2 3 4 5 6 [root@localhost ~]# sed ‘s/^[[:space:]]\+//‘ qq 1 2 3 4 5 6 [root@localhost ~]#
2、删除某文件中所有以# 开头,后面至少跟一个空白字符的行行首的#和空白字符
[root@localhost ~]# cat qq # 1 # 2 #3 # 4 # 5 # 6 [root@localhost ~]# sed ‘s/^#[[:space:]]\+//‘ qq 1 2 #3 4 5 6 [root@localhost ~]#
3、echo一个绝对路径,分别取其基名和目录名
[root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo/ |sed ‘s@[^/]\+/\?$@@‘ /etc/sysconfig/network-scripts/ [root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo |sed ‘s@[^/]\+/\?$@@‘ /etc/sysconfig/network-scripts/ [root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo |sed -e ‘s@/$@@‘ -e ‘s@.*/@@‘ ifcfg-lo [root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo/ |sed -e ‘s@/$@@‘ -e ‘s@.*/@@‘ ifcfg-lo
标签:sed
原文地址:http://www1707.blog.51cto.com/1184226/1739394