sed
-n 只有经过 sed 特殊处理的那一行 -e 直接在指令模式上进行 sed 的工作编辑 -f 执行 filename 内的 sed -r 延伸型正则表达式, 类似 egrep -i 直接修改读取的档案内容
a 新增 i 插入 d 删除 c 取代, 行取代 s 取代, 内容取代 r 读取文件
可以使用 @,! 等代替 /
表达式的最后一个的参数
g 代表全文 1 (默认), 表示替换第一个 2 表示替换第二个
echo "abcaba" | sed ‘s@a@d@2‘ # abcdba
cat /etc/fstab | sed ‘2r /etc/issue‘ # 将 /etc/issue 填加到 /etc/fstab 的第二行 cat /etc/fstab | sed -n ‘2,$p‘ # 打印 2 到最后一行 cat /etc/fstab | sed ‘s!/!#!g‘ # 替换
acidr
cat a.txt
111111 222222 333333
sed ‘2iabc\nd‘ a.txt # i, insert
111111 abc d 222222 333333
sed ‘2cabc\nd‘ a.txt # c, 取代
111111 abc d 333333
执行到 100 行的时候退出, 等同于
sed ‘100q‘ test.txt head -n 100 | sed ...
在文件的结尾添加一行, a 代表新建一行, $代表最后一行, 可以用 1, 表示第一行, N 来表示第 N 行
sed ‘$a #NEW LINE‘ FILE
替换
sed ‘s/#.*$//g‘ FILE # 删除# 开头的注释 sed ‘/^$/d‘ # 删除空白行 /^$/d
echo "hello world" | sed ‘s/ wo/wo/‘
helloworld
echo "hello world" | sed ‘s/hELLO/HELLO/‘
hello world
echo "hello world" | sed ‘s/hELLO/HELLO/i‘
HELLO world
cat test.txt
abc dabbc defbc
sed ‘/^ab/ { s/bc/ddd/}‘ test.txt 一开始使用 /*/ 然后 {}, 表示在该模式所匹配到的行内进行操作, 输出 addd aadddbc defbc
多次使用替换
echo "hello world" | sed ‘s/world/WORLD/;s/hello/HELLO/‘
HELLO WORLD
使用 & 來表示匹配的范围
echo "hello world" | sed ‘s/hello/& world/‘
hello world world
echo "see 1 2 3" | sed ‘s/see [0-9]/you &/‘
you see 1 2 3
echo "see 1 2 3" | sed ‘s/see [0-9].*/you &/‘
you see 1 2 3
后向引用
echo "see 1 2 3" | sed ‘s@\(see \)\([0-9]\)@\1@‘
see 2 3
echo "see 1 2 3" | sed ‘s/\(see \)\([0-9]\)/\2/‘
1 2 3
cat test.txt
first:second one:two
sed ‘s/\(.*\):\(.*\)/\2:\1/‘ test.txt
second:first two:one
echo /etc/rc.d/abc | sed ‘s@\(/.*/\)\([^/].*\)@\2@‘ echo /etc/rc.d/abc | sed -r ‘s@(/.*/)([^/]+)@\2@‘ # 使用延伸性的 re