Linux Sed
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
# 参数说明
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
# 动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
替换文件指定内容
1、将dog替换为cat,替换并输出(不修改源文件):
sed 's/dog/cat/g' file //dog被替换的内容,cat替换的内容
2、备份后直接替换至源文件:
sed -i.bak 's/dog/cat/g' file
3、替换第n行到第m行:
sed 'n,ms/dog/cat/g' file //n、m为数字
4、替换内容A和B之间的内容:
sed '/A/,/B/s/dog/cat/g' file //替换A和B之间的内容
5、一次替换多个多个内容:
sed -e 's/dog1/cat1/g' -e 's/dog2/cat2/g' file
6、在文件第四行添加
sed -e '4a\newLine' testfile
7、在文件第四行前添加
sed -e '4i\newLine' testfile
8、替换匹配行
sed -i '/:INPUT/c:INPUT DROP [0:0]' iptables
cat ifcfg-ens33 |grep -n ONBOOT //获取匹配字符行及行数
sed -i '/ONBOOT/d' ifcfg-ens33 //删除匹配字符行
# 匹配行前后加指定内容
i 插入内容 sed '/匹配词/i\要加入的内容' example.file 将内容插入到匹配的行目标的上一行位
sed -i '/allow linux.com/i\allow linux.cn' the.conf.file
a 追加内容 sed '/匹配词/a\要加入的内容' example.file(将内容追加到匹配的目标行的下一行位置)
sed -i '/allow linux.com/a\allow linux.cn' the.conf.file
删除文件指定内容
sed -i '1d' a.txt //删除第一行
sed -i '$d' a.txt //删除最后一行
sed '/^$/d' a.txt //删除所有空行
sed -i '12d' /etc/sysconfig/iptables //删除第12行
sed -i '/preSql/d' a.txt //删除匹配到preSql的行
sed -i '3~2d' a.txt //从第三行开始,每隔一行删除
sed -i '4,8d' a.txt //删除从第4行到第8行
sed -i '/Website Design/,$d' a.txt //从匹配行到末尾行
sed -i '/Storage/,+2d' a.txt //删除匹配行和之后两行
sed -i 's/\.$/\!/g' regular_express.txt //将文件内每一行结尾若为 . 则换成 !
nl /etc/passwd | sed '2d' //删除文件2行
nl /etc/passwd | sed '2,5d' //删除文件2-5行
nl /etc/passwd | sed '3,$d' //删除文件3行到最后
nl /etc/passwd | sed '2a drink tea' //第二行后添加
nl /etc/passwd | sed '2a drink tea' //第二行前添加
nl /etc/passwd | sed '2a Drink tea or ......\ > drink beer ?' 指定位置添加多行 (以 \ 分割)
nl /etc/passwd | sed '2,5c No 2-5 number' //将第2-5行替换指定内容
nl /etc/passwd | sed -n '/root/p' //搜索数据并显示
nl /etc/passwd | sed '/root/d' //搜索数据并删除
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' //执行多操作,删除第3行到末尾,并替换字符