Linux学习之sed替换命令加强版

参考文章:《Shell 编程–Sed》
cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810uname -r看到内核版本是3.10.0-957.el7.x86_64bash --version可以看到bash版本是4.2.46(2)
在这里插入图片描述

echo 'a : 1 : good ::::' >> sedplustest.txt
echo 'b : 2 : well ::::' >> sedplustest.txt
echo 'c : 3 : food ::::' >> sedplustest.txt
echo 'd : 4 : hood ::::' >> sedplustest.txt
echo 'e : 5 : bell ::::' >> sedplustest.txt
echo 'o : 6 : toll ::::' >> sedplustest.txt

使用上边的命令,把下边的内容:

a : 1 : good ::::
b : 2 : well ::::
c : 3 : food ::::
d : 4 : hood ::::
e : 5 : bell ::::
o : 6 : toll ::::

写入到sedplustest.txtcat sedplustest.txt看一下sedplustest.txt文件里边的内容。
在这里插入图片描述

全局替换

sed默认只处理模式空间第一次匹配的字符串,sed 's/:/!/' sedplustest.txt可以看到只把每行第一处:替换成了!,而每行第二处:没有任何改变,可以看到执行sed 's/:/!/' sedplustest.txt之后,sedplustest.txt里边的内容没有任何改变。
在这里插入图片描述
sed 's/:/!/g' sedplustest.txt会把每行中所有的:都替换成!,而sedplustest.txt文件的内容没有改变。
在这里插入图片描述

标志位

sed s/oldstring/newstring/标志位,标志位可以是如下的内容:

数字,表示第几次匹配替换。
g,就像上边全局替换的效果
p,进行打印
sed -n ‘command’ [FILE]…,会抑制打印
w file,将模式空间内容输出到file中。

数字

sed 's/:/!/2' sedplustest.txt可以把每行第2次匹配的:改成!
在这里插入图片描述
sed 's/:/!/6' sedplustest.txt可以把每行第6次匹配的:改成!
在这里插入图片描述

p打印

sed 's/a/!/p' sedplustest.txt会把匹配到内容的一行重复打印。
在这里插入图片描述

sed 's/a/!/' sedplustest.txt不管是否匹配到内容,都会输出每一行。sed -n 's/a/!/' sedplustest.txt不管是否匹配到内容都不会输出一行。sed -n 's/a/!/p' sedplustest.txt会把匹配内容的一行输出。p命令最好结合-n选项使用。
在这里插入图片描述

模式空间内容输出w file

sed -n 's/a/!/w record.txt' sedplustest.txt会把匹配到的第一处内容a替换成!,然后输出到record.txt里边。
在这里插入图片描述
sed -n 's/a/!/pw testpw.txt' sedplustest.txt会把匹配到的第一处内容a替换成!,然后输出到屏幕上和testpw.txt文件里。
在这里插入图片描述

sed -n 's/:/!/gpw testgpw.txt' sedplustest.txt会把匹配到的每行所有内容:替换成!,然后输出到屏幕上和testgpw.txt文件里。
在这里插入图片描述

寻址

寻址格式有以下格式:

/正则表达式/s/oldstring/newstring/标志位
行号s/oldstring/newstring/标志位,可以使用$表示最后一行
行号和正则表达式混用

/正则表达式/s/oldstring/newstring/标志位

sed '/^e/s/:/!/' sedplustest.txt可以把以e开头的一行先匹配,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

行号s/oldstring/newstring/标志位

sed '3s/:/!/' sedplustest.txt可以把第3行先匹配,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

行号和正则表达式混用

sed '/^e/,6s/:/!/' sedplustest.txt会匹配以e开始的行到第6行,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

分组

就是使用正则表达式匹配之后,执行多条命令,比如/正则表达式/{s/oldstring/newstring/标志位;s/oldstring/newstring/标志位
sed -n '/^e/{s/:/!/;s/e/a/2p}' sedplustest.txt可以把以e开始的行先匹配上,然后把匹配上的行先把第一处匹配的:改成!,然后再把第二处匹配的e改成a
在这里插入图片描述

sed脚本文件

echo '3s/:/!/' > sfile.sed3s/:/!/写入到sfile.sed中,然后sed -f sfile.sed sedplustest.txt使用sfile.sed的内容作为命令操作sedplustest.txt,把第三行的第一处匹配到的:替换成!
在这里插入图片描述

此文章为8月Day 8学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》

猜你喜欢

转载自blog.csdn.net/qq_42108074/article/details/132113921
今日推荐