sed 常用及特殊用法 cat test.txt | cat tt.txt #DBtest=test | #DBtest=test | DBtest=123 DBtest=123 | #dbtest=qaz | DBTEST=abc #dbtest=qaz | dbTest=456 | dbTest=789 DBTEST=abc | #dbtest=111 |------------------------------ dbtest=456 | | dbTest=789 | #dbtest=111 | ------------------------------------------------------- ------------------------------------------------------- #num1-增加(插入) 在文件第1行添加test,文件结尾添加testtest(加i修改源文件,i为行前插入) sed -e '1i test' -e '$a testtest' tt.txt 在文件第2行添加test sed '2i test' tt.txt 在文件第一行到第四行的每行下面添加 sed '1,4i test' tt.txt 在第二行后面插入test sed '2a test' tt.txt 在匹配的行后面插入test sed -r '/(111)$/a test' tt.txt 在第二行到匹配行每一行后都插入test sed -r '2,/(111)$/a test' tt.txt 将指定文件中的数据插入到数据流的末尾 sed '$r test.txt' tt.txt 将以小写字母结尾的行写入到txx文件(相当于重定向) sed -r '/[a-z]$/w txx' tt.txt -r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上 匹配tt.txt第1行后读入test.txt的内容在匹配内容之下,仅显示用 sed '1 r /root/test.txt' tt.txt -w是写入命令 匹配后写入到text.txt sed -n '/111/ w /root/text.txt' tt.txt !!注意!! 该命令会真实写入 ------------------------------------------------------- ------------------------------------------------------- #num2-删除 删除第3到第9行,只是不显示而已 sed '3,9d' tt.txt 删除包含"123"的行到第5行的内容 sed -r '/(123)$/,5d' tt.txt !!注意!! 查找顺序是从上往下 sed -ne '/^DB/,/^db/d' -e 'p' tt.txt #DBtest=test dbTest=789 #dbtest=111 ------------------------------------------------------- ------------------------------------------------------- #num3-修改 所有的1替换成x sed 's/1/x/g' tt.txt 2到5所有的2替换成o sed '2,5s/2/o/g' tt.txt 每行的的第一个1替换成x sed 's/1/x/' tt.txt 把每个单词的第一个小写字母变大写 sed 's/\b[a-z]/\u&/g' filename 把所有小写变大写 sed 's/[a-z]/\u&/g' filename 把所有大写变小写 sed 's/[A-Z]/\l&/g' filename ------------------------------------------------------- ------------------------------------------------------- #num4-打印(查询) 显示第3行 sed -n '3p' test.txt 显示第3行到第9行 sed -n '3,9p' test.txt 打印最后1行 sed -n '$p' test.txt 显示正则匹配内容(以#开头数字结尾的行) sed -n '/^#.*[0-9]$/p' test.txt sed -n '/^#\(.*\)[0-9]$/p' test.txt sed -n -r '/^#(.*)[0-9]$/p' test.txt sed -nr '/^(server)(.*)(org iburst)$/p' /etc/ntp.conf sed -n '/^\(server\)\(.*\)\(org\ iburst\)$/p' /etc/ntp.conf 显示结果: server 0.rhel.pool.ntp.org iburst server 1.rhel.pool.ntp.org iburst server 2.rhel.pool.ntp.org iburst server 3.rhel.pool.ntp.org iburst 打印1-2行,并显示行号 sed -ne '1,2p' -e '1,2=' tt.txt #DBtest=test 1 DBtest=123 2 !!注意!! 行号单独一行显示 正则匹配IP和子网掩码 ifconfig eth0 | sed -n -r 's/inet (.*) n.*k (.*) bro.*/\1 \2/p' 192.168.3.239 255.255.240.0 #当然有更好的方法 -------------------------------------------------------------- -------------------------------------------------------------- #num5-特殊用法 打印#号开头,并在末尾添加字符且输出行号 sed -ne 's/^#.*/&123123/p' -e '/^#.*/=' tt.txt !!注意!! &符号在sed命令中代表上次匹配的结果,=输出行号 -e是编辑命令,用于多个编辑任务 打印#号开头,并在末尾添加字符且输出文件所有行号 sed -n 's/^#.*/&123123/p;=' tt.txt sed -ne 's/^#.*/&123123/p;=' tt.txt (-e选项可省略) # cat tt.txt #DBtest=test DBtest=123 #dbtest=qaz DBTEST=abc dbtest=456 dbTest=789 #dbtest=111 打印出匹配行及匹配行的下一行 sed -n 'N;s/\n/\t/p' tt.txt #DBtest=test DBtest=123 #dbtest=qaz DBTEST=abc dbtest=456 dbTest=789 !!注意!! 若匹配行无下一行(连空行都没有),则不打印出无下行匹配行的行 打印#号开头,且将下一行与匹配行改为一行显示 sed -n 'N;/^#/s/\n/\t/p' tt.txt #DBtest=test DBtest=123 #dbtest=qaz DBTEST=abc 多个命令(条件)一起使用 sed -n -r '/[a-z]$/{N;s/\n/\t/g;/^#/p}' tt.txt #DBtest=test DBtest=123 #dbtest=qaz DBTEST=abc ##--类似替换--## perl -pi -e 's|被替换的字符串|替换后的字符串|g' filename