http://sed.sourceforge.net/
sed -n 's/root/admin/p' /etc/passwd sed -n 's/root/admin/2p' /etc/passwd #在每行的第2个root作替换 sed -n 's/root/admin/gp' /etc/passwd sed -n '1,10 s/root/admin/gp' /etc/passwd sed -n 's/root/AAA&BBB/2p' /etc/passwd #将root替换成AAArootBBB,&作反向引用,代替前面的匹配项 sed -ne 's/root/AAA&BBB/' -ne 's/bash/AAA&BBB/p' /etc/passwd #-e将多个命令连接起来,将root或bash行作替换 sed -n 's/root/AAA&BBB/;s/bash/AAA&BBB/p' /etc/passwd #与上命令功能相同 sed -nr 's/(root)(.*)(bash)/\3\2\1/p' /etc/passwd #将root与bash位置替换,两标记替换 或sed -n 's/root.∗bash/\3\2\1/p' /etc/passwd
ls -1 *.html| awk '{printf "sed \047s/ADDRESS/address/g\047 %s >%s.sed;mv %s.sed %s\n", $1, $1, $1, $1;}'|bash for f in `ls -1 *.html`; do [ -f $f ] && sed 's/<\/BODY>/<script src="http:\/\/www.google-analytics.com\/urchin.js" type="text\/javascript"><\/script>\n<script type="text\/javascript">\n_uacct = "UA-2033740-1";\nurchinTracker();\n<\/script>\n<\/BODY>/g' $f >$f.sed;mv $f.sed $f ; done;
my=/root/dir str="/root/dir/file1 /root/dir/file2 /root/dir/file3 /root/dir/file/file1" echo $str | sed "s:$my::g"
$ echo "aaa=\"bbb\"" | sed 's/.*=\"\(.*\)\"/\1/g' $ curl -s http://www.example.com | egrep -o '<a href="(.*)">.*</a>' | sed -e 's/.*href="\([^"]*\)".*/\1/'
Mac 地址转换
echo 192.168.2.1-a1f4.40c1.5756 | sed -r 's|(.*-)(..)(..).(..)(..).(..)(..)|\1\2:\3:\4:\5:\6:\7|g'
i 命令插入一行,并且在当前行前面有两个空格
在root行前插入一个admin
sed '/root/i admin' /etc/passwd
33 行处插入字符
sed -i "33 i \ \ authorization: enabled" /etc/mongod.conf
删除含有root的行
sed '/root/d' /etc/passwd
模式空间中的内容全部打印出来
定位行:
sed -n '12,~3p' pass #从第12行开始,直到下一个3的倍数行(12-15行) sed -n '12,+4p' pass #从第12行开始,连续4行(12-16行) sed -n '12~3p' pass #从第12行开始,间隔3行输出一次(12,15,18,21...) sed -n '10,$p' pass #从第10行至结尾 sed -n '4!p' pass #除去第4行
打印3~6行间的内容
$ sed -n '3,6p' /etc/passwd bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin
打印35行至行尾
$ sed -n '35,$p' /etc/passwd sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin mysql:x:117:126:MySQL Server,,,:/nonexistent:/bin/false uuidd:x:100:101::/run/uuidd:/bin/false libvirt-qemu:x:118:128:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false libvirt-dnsmasq:x:119:129:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false redis:x:120:130::/var/lib/redis:/bin/false
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)
下面例子是替换t.php中的java字符串为php
$ cat t.php <?java $ sed -i 's/java/php/g' t.php $ cat t.php <?php
find -name "*.php" -exec sed -i '/<?.*eval(gzinflate(base64.*?>/ d' '{}' \; -print
指定查找替换的行号
sed -i "7,7 s/#server.host: \"localhost\"/server.host: \"0.0.0.0\"/" /etc/kibana/kibana.yml
正则:'/正则式/'
sed -n '/root/p' /etc/passwd sed -n '/^root/p' /etc/passwd sed -n '/bash$/p' /etc/passwd sed -n '/ro.t/p' /etc/passwd sed -n '/ro*/p' /etc/passwd sed -n '/[ABC]/p' /etc/passwd sed -n '/[A-Z]/p' /etc/passwd sed -n '/[^ABC]/p' /etc/passwd sed -n '/^[^ABC]/p' /etc/passwd sed -n '/\<root/p' /etc/passwd sed -n '/root\>/p' /etc/passwd
扩展正则:
sed -n '/root\|yerik/p' /etc/passwd #拓展正则需要转义 sed -nr '/root|yerik/p' /etc/passwd #加-r参数支持拓展正则 sed -nr '/ro(ot|ye)rik/p' /etc/passwd #匹配rootrik和royerik单词 sed -nr '/ro?t/p' /etc/passwd #?匹配0-1次前导字符 sed -nr '/ro+t/p' /etc/passwd #匹配1-n次前导字符 sed -nr '/ro{2}t/p' /etc/passwd #匹配2次前导字符 sed -nr '/ro{2,}t/p' /etc/passwd #匹配多于2次前导字符 sed -nr '/ro{2,4}t/p' /etc/passwd #匹配2-4次前导字符 sed -nr '/(root)*/p' /etc/passwd #匹配0-n次前导单词
cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/' > aaa=bbb > aaa=ccc > aaa=ddd > aaa=[something else] ! aaa=bbb aaa=ccc aaa=ddd aaa=xxx
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。