Linux之sed命令
1.sed命令的原理过程
按照文件每行信息进行处理,找出符合条件的信息,执行相应操作;
- 找什么信息,做什么事情;
- 一行一行的进行查找操作
- 找到要处理的信息进行处理操作
- 操作时会有默认输出,-n 参数可以取消默认输出;
2.sed命令参数详解
-n #取消默认显示 -i # 修改文件 -i.bak # 先备份,再修改 #-i和-n不能同时使用 -r #表示扩展正则匹配 -e #多个操作接在一起操作
s #替换 p #打印输出 a #在匹配行后一行增加内容 i #在匹配行前一行增加内容
c #替换匹配的这一行
d #删除
g #表示全局global
& #调用前面的正则匹配
= #打印文件行号
N #将当前读入行的下一行读取到当前的模式空间,即同时执行两行;
3.sed命令练习操作
(1)替换dks.txt文本中old为new
sed -i 's#old#new#g' dks.txt
(2)打印dks.txt文本第一行至第三行
sed -n '1,3p' dks.txt
(3)打印dks.txt文本中第一行与最后一行
sed -n '1p;$p' dks.txt
(4)删除 dks.txt 第一行至第三行
sed '1,3d' dks.txt
(5)删除‘匹配到的行’至最后一行
sed '/匹配内容/,$d' dks.txt
(6)删除 dks.txt 最后 6 行及删除最后一行
for i in `seq 1 6`;do echo $i; sed -i '$d' dks.txt ;echo "-----" ; done
(7)在 dks.txt 文件中查找 dks 所在行,并将其上一行添加 word 字符
sed -i '#dks#iword' dks.txt
(8)在 dks.txt 文件中查找 dks 所在行,并在其下一行添加 word 字符
sed -i '#dks#aword' dks.txt
(9)在 dks.txt 文件中,查找以 test 结尾的行,并在行尾添加字符串 word
sed 's#test$#&word#g' dks.tx
(10)在 dks.txt 文件中,查找 test 所在的行,并在其行首添加字符串 word
sed '#test#s#^#&word#g' dks.txt
(11)多个 sed 命令组合,使用-e 参数
sed -i -e '/www/s/^/&1./' -e 's/www$/&./g' dks.txt
(12)多个 sed 命令组合,使用分号“;”分割
sed -i -e '/test/s/^/&1/ ; s/test$/&./g' dks.txt
(13)sed 读取系统变量,变量替换
Test=123 sed "s/test/$Test/g" dks.txt
(14)修改 selinux 策略 enforcing 为 disabled,查找/SELINUX/行,然后将其 enforcing值改成 disabled ; !s 表示不替换前面的匹配行
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config
(15)合并上下两行,即两行合并;参数 N 可以同时处理两行;
sed -n 'N;s/\n/ /p' dks.txt
(16)使用 sed 命令先备份后修改
sed -i.bak '3,5d' test.txt
(17)在第 2 行之前,在第 3 行之后插入
sed -i -e '2i123' -e '3a123' test.txt
(18)通过后项引用取 IP 地址
ifconfig eth0|sed -nr '2s#^.*inet (.*) .*netmask.*$#\1#gp'
(19)合并所有行
cat num.txt|sed ':a;N;s/\n/ /;ba;'