参数说明

-e < script >或 –expression=< script > 以选项中指定的 script 来处理输入的文本文件。
-f <script 文件>或 –file=<script 文件> 以选项中指定的 script 文件来处理输入的文本文件。
-h 或 –help 显示帮助。
-n 或 –quiet 或 –silent 仅显示 script 处理后的结果。
-V 或 –version 显示版本信息。
-i 直接修改文件内容

动作说明

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现 (目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现 (目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

一些例子

打印两个字符之间的所有行

1
sed -n '/-----BEGIN RSA PRIVATE KEY-----/,/-----END RSA PRIVATE KEY-----/p' ~/.ssh/id_rsa

在指定位置插入行

说明 命令
在第二行后面插入,也就是 xxxx 在第三行 sed ‘2a xxxx’ a.txt
在第二行前面插入,也就是 xxxx 在第二行 sed ‘2i xxxx’ a.txt
在第二和第四行后面插入,也就是 xxxx 在第 3 和第 5 行 sed ‘2,4a xxxx’ a.txt
跟上面有所不同,xxxx 在第 3 行和第 6 行 sed -e ‘2a xxxx’ -e ‘4a xxxx’ a.txt
行首添加一行,xxxx 在第一行 sed ‘1i xxxx’ a.txt
行尾添加一行,xxxx 在最后一行 sed ‘$a xxxx’ a.txt
在奇数行后添加一行 sed ‘1~2a xxxx’ a.txt
在偶数行后添加一行 sed ‘2~2a xxxx’ a.txt
在匹配到的行后添加一行 sed ‘/^hello/a xxxx’ a.txt

查看 400-500 行的内容

1
sed  -n  '400,500p'  file文件名

^表示行首
$ 表示行尾
&表示一整行

删除一个文件中行号为奇数的行

1
sed '1~2'd  file

删除一个文件中指定行

1
2
3
4
5
# 删除第一行
sed -i '1d' filename

# 删除300和400行
sed -i '300,400'd file

在 testfile 文件的第四行后添加一行,并将结果输出到标准输出

1
sed -e 4a\newLine testfile

删除空行

1
sed '/^$/d'

删除指定的字符

1
echo "{abc}:\"" | sed 's/[{}":]//g'

sed 替换 字符串

1
git_url=$(echo $4 | sed 's/http/https/')

将某一行加注释

1
sed 's/^nameserver/#&/' /etc/resolv.conf

修改配置

1
sed -i "s/aaa=.*/aaa=123456/g" config.ini

删除空格

1
echo '   12 345   ' | sed 's/ //g'

替换文件里面的内容

1
2
3
sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
# 如果要替换的文本里含有/可以换成#、@
sed -i "s#security.ubuntu.com#mirrors.aliyun.com#g" /etc/apt/sources.list

多次替换文本

1
2
3
sed -i xxx.txt \
-e 's/111/222/g' \
-e 's/333/444/g'

将 111 替换成 222,333 替换成 444