目录
linux三剑客之sed
定义: 流媒体编辑器
# 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
三剑客:
grep :过滤文本
sed :修改文本
awk :处理文本
1、 sed格式: sed 参数 '处理规则' 操作对象
# 暂时补充:d为编辑模式:删除
2、 定位:
1、数字定位法
指定行号:
sed '3d' 4.txt (删除文本中的第三行)
sed '2,4d' 4.txt (删除文本中的第二行到第四行)
2、正则定位法
sed '/^g/d' 2.txt (删除正则匹配到的g开头的行)
3、数字和正则定位法
sed '3,/^g/d' 2.txt (删除第三行到正则匹配到的行 :第三行到开头为g的行)
4、正则且正则定位法
sed '/^g/,/^j/d' 2.txt(删除前一个正则和后一个正则匹配到行之间所有的行)
3、 sed 参数:
-e :允许多项编辑
eg : sed -e '4d' -e '5d' 4.txt (这样就删除的第4行与第5行)
-n :取消默认输出(静默输出)
eg :sed -n '5d' 4.txt (删除第5行 但是不打印出来)
-i :就地编辑(打印出来的内容直接写入到文件里)
eg :sed -i '5p' 4.txt
cat 4.txt (此时就打印第一行 直接编辑写入到文件中)
-r :支持拓展正则
eg :sed -r '/123/d' 4.txt # 两个斜线当中为正则
(此时就删除正则匹配到的123 并打印出来)
-f :指定sed匹配规则脚本文件(解决命令冗余问题,有可能正则命令很多就容易错)
eg :把正则写入到文件中2.txt /123/d 利用脚本文件来操作另一个文件
sed -f 2.txt 4.txt
(此时和上边的结果时一摸一样的。)
sed 编辑模式
4、 sed的编辑模式:
d :删除
sed '2d' 4.txt (删除文本中的第二行)
p :打印
sed '2p' 4.txt (打印文本中的第二行)
a :在当前行后添加一行或多行
sed '2axxx' 4.txt (在第2行下一行 添加xxx成立单独的一行(第三行))
c :用新文本修改(替换) 当前行
sed '2cxxx' 4.txt (将第二行的内容修改(替换)成xxx)
i :在当前行之前,插入文本(单独使用时)
sed '2ixxx' 4.txt (在第二行的前一行 添加xxx成立单独的一行(第二行))
r :在文件中读内容
sed '2r 3.txt' 4.txt (在第二行的下一行插入3.txt文本中的内容)
w :将指定行写入文件
sed '2w 3.txt' 4.txt (将4.txt文本中的第二行内容写入到3.txt文本中)
cat 3.txt (查看3.txt文本只有第二行内容 ) # 故:所有是清空并写入
y :将字符转换成另一个字符
sed '2y/af/AF' 4.txt (将文本中第二行的小a替换成大A 小f替换成大F)
s :将字符串转换成另一个字符串(每一行只替换一次)
sed 's/22/33' 4.txt
(将文本中的22替换成33 如果某一行中有类似于22s22的只替换第一个22)
g :全部执行(将功能应用到整行)
sed 's/22/33/g' 4.txt
(将文本中'所有的'的22替换成33 )
* i :忽略大小写(跟 s 模式一起使用时)
sed 's/F/adad/gi' 4.txt (将文本中的f或F 全部替换成adad )
& :代表前面匹配到的内容 之前 添加本层匹配到的内容
,& 就代表在匹配到的内容前添加一个 ,
# 案例:将nginx.conf 中每一行前面添加一个#
sed 's/.*/# &/g' /etc/nginx/nginx.coonf
案例:
1、将nginx.conf 中的注释行全部去掉
[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
2、要求一键修改本机的ip
sed -i 's/\.100/\.101/g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
3、将/etc/passwd中的root修改成ROOT
sed -i 's/root/ROOT/g' /etc/passwd