linux常备工具之sed

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daguanjia11/article/details/83271772

sed是linux上的一个常用命令,意思是stream editor,用来对输入或文件的内容进行处理。它不会修改原来的内容,而是将处理后的结果输出到stdout。

sed是一个极其强大的命令,完整地介绍它大概需要写一本书,我也只能介绍几个我个人比较常用的用法。

使用sed命令来查找替换

这个是我使用最多的场景,使用方法为:

sed ‘s/find/replace/’

下面来举个例子。

假设当前目录下有一个名叫c.txt的文件,内容如下

jobcenter-test-1
jobcenter-test-2
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

我希望将里面的test修改为TEST,用法如下:

$ sed 's/test/TEST/' c.txt 
jobcenter-TEST-1
jobcenter-TEST-2
jobcenter-TEST-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

其中,三个’/'中间是两个正则表达式,所以结合正则表达式将会具备很强的处理能力。

如果我想同时把prod修改为PROD,则可以在此基础上再使用一次sed

$ sed 's/test/TEST/' c.txt |sed 's/prod/PROD/'
jobcenter-TEST-1
jobcenter-TEST-2
jobcenter-TEST-3
jobcenter-PROD-1
jobcenter-PROD-2
jobcenter-PROD-3

并且它不会修改本地文件的内容,只是将修改后的内容输出。

关于查找替换,还有一点要说明一下,默认情况下,查找替换在每行只会发生一次。下面的例子中,我希望将小写的e替换为大写的E,但每行只生效了一次

$ sed 's/e/E/' c.txt 
jobcEnter-test-1
jobcEnter-test-2
jobcEnter-test-3
jobcEnter-prod-1
jobcEnter-prod-2
jobcEnter-prod-3

如果我希望替换所有的小写e的话,需要在最后一个/后面加上g

$ sed 's/e/E/g' c.txt 
jobcEntEr-tEst-1
jobcEntEr-tEst-2
jobcEntEr-tEst-3
jobcEntEr-prod-1
jobcEntEr-prod-2
jobcEntEr-prod-3

使用sed来选取特定的行

sed有两种方式可以选取特定的行,分别是按照行号和配额某个正则表达式。

sed -n ‘3,5p’ file #输出第3到第5行
sed -n /regex/p’ file #输出内容能够匹配regex的行

下面来看下具体例子

$ sed -n '3,5p' c.txt 
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2

上面是输出了文件c.txt的第3至第5行

$ sed -n '/test/p' c.txt 
jobcenter-test-1
jobcenter-test-2
jobcenter-test-3

上面输出了匹配test的所有行

使用sed来删除行

这种用法与选取行类似,或者说与选取行恰恰相反

sed ‘3,5d’ file #输出第3到第5行
sed /regex/d’ file #输出内容能够匹配regex的行

下面来看下具体的例子

$ sed '3,5d' c.txt 
jobcenter-test-1
jobcenter-test-2
jobcenter-prod-3

上面是删除了第3至第5行,输出了其余的所有行。

$ sed '/test/d' c.txt 
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

上面的命令删除了含有test的行,输出了其余的所有行

猜你喜欢

转载自blog.csdn.net/daguanjia11/article/details/83271772
今日推荐