欢迎各位兄弟 发布技术文章
这里的技术是共享的
使用 -i 一定要先测试好 ,然后备份,这一点一定要注意
sed 里面可以实现条件判断和循环的
地址定界
1)不给地址,对全文进行处理
2)单地址
#:指定的行
/pattern/:被此处模式所能够匹配的每一行
3)地址范围
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
4)~:步进
1~2 读所有奇数行
2~2 读所有偶数行
等于号=,为模式空间中的行打印行号 显示符合条件的行的行号
[root@localhost ~]# sed '1,3=' /etc/fstab
感叹号!是为地址定界取反的,跟在地址后面) (本质上感叹号不是一个命令) 除了 UUID开头的都删除
# sed '/^UUID/!d' /etc/fstab
s///:支持使用其它分隔符,s@@@,s###;
替换标记:
g: (global)行内全局替换
p: (print)如果替换成功,则显示之,,,,显示替换成功的行
w /PATH/TO/SOMEFILE: (write)将替换成功后的结果保存至指定的文件中
高级编辑命令
模式空间 pattern space 相当于生产车间
保持空间 (保留空间) hold space 相当于仓库 默认情况下,为空白行(当模式空间删除掉的时候保持空间也是为空,就没有空白行了;换句话说,没有模式空间(不是清空模式空间,是模大空间根本没有)的情况下,保持空间也没有了又好像不能这么理解,;;;;;;;; 好像是说模式空间删除掉后,就无法执行G追加了)
h: hold [address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除。
H: hold [address[,address]]H 将pattern space中的内容append到hold space\n后。
g: get [address[,address]]g 将hold space中的内容覆盖到pattern space中,原来pattern space里的内容清除。
G: get [address[,address]]G 将hold space中的内容添加到pattern space\n后。
x: exchange 交换保持空间和模式空间的内容。
n: next 读取匹配到的行的下一行至模式空间,同时覆盖本行
N: next 追加匹配到的行的下一行至模式空间,此时模式空间有两行,当前行和下一行
d: delete 删除模式空间中的一行
D: delete 删除模式空间中的多行(所有行)
任何一行读完之后不会再读第二次
一次时处理多个命令 使用分号隔开
sed -n "n;p" FILE 显示偶数行
sed '1!G;h;$!d' FILE 逆向显示文件内容, 行倒序输出, 相当于 tac 倒序输出
sed '$!N;$!D' FILE 取文件的最后两行 相当于 tail -2 FILE (显示文件后两行) (没看懂)
sed '$!d' FILE 取文件的最后一行
sed 'G' FILE 文件的每一行后面加个空白行 (因为保持空间默认是空白的)
sed 'g' FILE 每一行全部替换为空白行
sed '/^$/d;G' FILE 空白行删除后,每一行后面再加个空白行 (没看懂)
sed 'n;d' FILE 显示奇数行 (没看懂)
sed -n '1!G;h;$p' FILE 逆向显示文件内容, 行倒序输出, 相当于 tac 倒序输出 (没看懂)
sed -i -n '1!G;h;$p' test.txt (-i就保存到原文件里了)
[root@localhost ~]# sed 's@r..t@&er@' /etc/passwd (显示了全部的内容)
[root@localhost ~]# sed -n 's@r..t@&er@' /etc/passwd
[root@localhost ~]# sed -n 's@r..t@&er@p' /etc/passwd (把匹配到的行,被替换的行进行显示,用p)
rooter:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rooter:/sbin/nologin
ftp:x:14:50:FTP User:/var/fterp:/sbin/nologin
[root@localhost ~]#
[root@localhost ~]# vim test.txt
[root@localhost ~]# sed -n 'n;p' test.txt
2
4
6
8
10
[root@localhost ~]#
[root@localhost ~]# sed '1!G;h;$!d' test.txt
6
5
4
3
2
1
[root@localhost ~]# sed '$!N;$!D' test.txt
5
6
[root@localhost ~]# sed '$!d' test.txt
10
[root@localhost ~]#
[root@localhost ~]# sed 'G' test.txt
[root@localhost ~]# sed 'g' test.txt
[root@localhost ~]# vim test.txt
[root@localhost ~]# sed '/^$/d;G' test.txt 把空白行删除,然后每一行下面加个空白行
# vim test.txt
[root@localhost ~]# sed 'n;d' test.txt (显示奇数行)
1
3
5
7
9
[root@localhost ~]#
[root@localhost ~]# sed -n '1~2p' test.txt (显示奇数行)
[root@localhost ~]#
[root@localhost ~]# sed -n '2~2p' test.txt (显示偶数行)
[root@localhost ~]#
[root@localhost ~]# sed '1!G;h;$p' test.txt
[root@localhost ~]# sed -n '1!G;h;$p' test.txt
[root@localhost ~]# sed -i -n '1!G;h;$p' test.txt (-i就保存到原文件里了)
[root@localhost ~]# cat test.txt