UNIX中的SED命令

时间:2020-02-23 14:45:06  来源:igfitidea点击:

SED(Stream Editor)是一个命令行实用程序,用于修改匹配指定字符串的文件或者流的每行。
它使基本文本更改为文件或者从管道输入。

SED命令可以在文件上执行各种函数,搜索,查找和替换,插入或者删除。
SED命令最常见的使用是替换或者查找和更换。
使用sed命令,即使在不打开它们的情况下也可以编辑文件,这是更快的方式来查找和替换文件中的内容,而不是在编辑器中的第一个打开,然后更改它。

一个例子可以帮助了解sed命令。
我们有一个名为sed_demo.txt的文件,具有这些行。

$cat sed_demo.txt >
        1. Nike Shoes - Tag 344 - Price 
 	2. Rebook shoes - Tag 433 - Price 
 	3. Bata Shoes - Tag 211 - Price 
 	4. Summer Shoes - Tag 978 - Price 

我们希望用19美元的价格更改16美元的价格。
Sed命令让我们这样做

$sed 's/16/19/' sed_demo.txt

在执行上面的命令时,我们将看到这样的东西

$cat sed_demo.txt
        1. Nike Shoes - Tag 344 - Price 
 	2. Rebook shoes - Tag 433 - Price 
 	3. Bata Shoes - Tag 211 - Price 
 	4. Summer Shoes - Tag 978 - Price 

如果我们要更改文件,请在下面使用以下命令使用下面的命令。

$sed -i -e 's/16/19/' sed_demo.txt

价格现在增加到19美元(以粗体显示)。

这是另一种方法

$sed 's/16/19/' sed_demo.txt > sed_demo_new.txt

此命令也将将价格更改为19,但更改将其保存在一个名称sed_demo_new.txt的新文件中,在这种情况下,原始文件sed_demo.txt仍未受到影响。

使用sed命令我们可以提取具有特定字符串的行。

$sed -n '/Bata/p' sed_demo.txt > sed_demo_new.txt

这将提取具有"bata"的所有行,并将其粘贴到名为sed_demo_new.txt的新文件中。

我们可以将sed命令应用于stdin,

$echo 'Welcome to My Linux Blog' | sed 's/Blog/website/'

S选项用第二个文本模式替换第一个文本。
在这种情况下,字符串"website "将被"Blog"替换。

SED命令具有/1,/2等标志,可以取代一行中的图案的第一个,第二次发生。
下面的命令用一行中的"衬衫"替换了"鞋子"一词的第二个发生。

$sed 's/shoes/Shirt/2' sed_demo.txt

SED命令具有替代标志/g(全局替换),它替换行中的所有字符串的所有发生。

$sed 's/shoes/Shirt/g' sed_demo.txt

这将替换在sed_demo.txt文件中使用衬衫的每次鞋子。

还可以将/1、/2等与/g组合,以替换一行中第n次出现的所有图案。下面的sed命令将行中第二个出现的“shoes”字替换为“Shirt”字。

$sed 's/shoes/Shirt/2g' sed_demo.txt