50个sed命令示例

2024年 4月 26日 83.2k 0

sed是GNU/Linux的一个有用的文本处理功能。sed的完整形式是流编辑器。使用sed命令可以非常容易地完成许多类型的简单和复杂的文本处理任务。通过使用带sed命令的正则表达式,可以搜索、替换和删除文本或文件中的任何特定字符串。但此命令会临时执行所有类型的修改,并且默认情况下不会更改原始文件内容。如果需要,用户可以将修改后的内容存储到另一个文件中。“sed”命令的基本用法将在本教程中使用50个独特的示例进行解释。在开始本教程之前,您必须通过运行以下命令检查操作系统中已安装的“sed”版本。本教程是基于GNU sed设计的。因此,练习本教程中显示的示例需要使用此版本的“sed”。
sed—版本

以下输出显示系统中安装了版本为4.4的GNU Sed。

语法:

sed[选项]…[脚本][文件]

如果“sed”命令没有提供文件名,则脚本将处理标准输入数据。sed脚本可以在没有任何选项的情况下执行。

所容纳之物

  1. 使用“sed”的基本文本替换
  2. 使用“g”选项替换文件特定行中文本的所有实例
  3. 仅替换每行上第二次出现的匹配项
  4. 仅替换每行上最后一次出现的匹配项
  5. 用新文本替换文件中的第一个匹配项
  6. 用新文本替换文件中的最后一个匹配项
  7. 在替换命令中转义反斜杠以管理文件路径的搜索和替换
  8. 将所有文件的完整路径替换为仅文件名无目录
  9. 替换文本,但前提是在字符串中找到其他文本
  10. 替换文本,但前提是在字符串中找不到其他文本
  11. 使用“1”在匹配模式前后添加字符串
  12. 删除匹配行
  13. 删除匹配行和匹配行后的2行
  14. 删除文本行末尾的所有空格
  15. 删除行上有两次匹配的所有行
  16. 删除所有只有空白的行
  17. 删除所有不可打印的字符
  18. 如果行中有匹配项,请在行的末尾添加一些内容
  19. 如果行中有匹配项,请在匹配项之前插入行
  20. 如果行中有匹配项,请在匹配项之后插入行
  21. 如果没有匹配项,请在行尾添加一些内容
  22. 如果不匹配,则删除该行
  23. 在文本后添加空格后重复匹配的文本
  24. 将字符串列表中的一个字符串替换为其他列表中的新字符串
  25. 将匹配的字符串替换为包含换行符的字符串
  26. 从文件中删除换行符,并在每行末尾插入一个逗号
  27. 删除逗号并添加换行符以将文本拆分为多行
  28. 查找不区分大小写的匹配项并删除行
  29. 查找不区分大小写的匹配项并替换为新文本
  30. 查找不区分大小写的匹配项,并替换为相同文本的所有大写字母
  31. 查找不区分大小写的匹配项,并替换为相同文本的所有小写字母
  32. 将文本中的所有大写字符替换为小写字符
  33. 搜索行中的数字,并在数字后面附加货币符号
  34. 在超过3位的数字中添加逗号
  35. 将制表符替换为4个空格字符
  36. 用制表符替换4个连续空格字符
  37. 将所有行截断为前80个字符
  38. 搜索字符串regex并在其后面附加一些标准文本
  39. 搜索一个字符串正则表达式和在它之后找到的字符串的第二个副本
  40. 从文件中运行多行“sed”脚本
  41. 匹配多行模式并替换为新的多行文本
  42. 替换与模式匹配的两个单词的顺序
  43. 从命令行使用多个sed命令
  44. 将sed与其他命令结合使用
  45. 在文件中插入空行
  46. 从文件的每一行中删除所有字母数字字符。
  47. 使用“&”匹配字符串
  48. 切换成对的单词
  49. 将每个单词的第一个字符大写
  50. 打印文件的行号

1.使用sed的基本文本替换

使用sed命令,可以使用搜索和替换模式来搜索和替换文本的任何特定部分。在以下示例中,“s”表示搜索和替换任务。单词“Bash”将在文本“Bash Scripting Language”中搜索,如果该单词存在于文本中,则它将被单词“Perl”取代。

echo“Bash脚本语言”|sed的s/Bash/Perl/'

在该执行的输出中,文本中存在单词“Bash”。所以输出是“Perl脚本语言”。

sed命令也可以用于替换文件内容的任何部分。创建一个名为weekday.txt的文本文件,其中包含以下内容:

$cat weekday.txt

星期一

星期二

星期三

星期四

星期五

星期六

星期日

以下命令将搜索文本“Sunday”并将其替换为文本“Sundayis holiday”。

sed的/周日/周日是假日/'weekday.txt

在该执行的输出中,weekday.txt文件中存在“Sunday”,并且在执行上述sed命令后,该单词被文本“Sunday is holiday”替换。

转到顶部

2.使用“g”选项替换文件特定行中文本的所有实例

sed命令中使用“g”选项来替换所有匹配模式的出现。创建一个名为python.txt的文本文件,其中包含以下内容,以了解“g”选项的用法。此文件多次包含单词“Python”。

$cat python.txt

Python是一种非常流行的语言。

Python很容易使用。Python很容易学习。

Python是一种跨平台语言

以下命令将替换文件Python.txt第二行中出现的所有“Python”。这里,“Python”在第二行出现两次。

sed'2s/Python/perl/g'Python.txt

运行脚本后将出现以下输出。这里,第二行中所有出现的“Python”都被“Perl”替换。

转到顶部

3.只替换每行上第二次出现的匹配项

如果任何单词在文件中多次出现,则可以使用具有出现次数的sed命令来替换每行中该单词的特定出现次数。以下sed命令将替换文件python.txt每行中第二次出现的搜索模式。

sed的s/Python/perl/g2'Python.txt

运行上述命令后,将出现以下输出。在这里,搜索文本“Python”仅在第二行出现两次,并被文本“Perl”替换:


转到顶部

4.只替换每行上最后一次出现的匹配项

创建一个名为“lang.txt”的文本文件,其中包含以下内容。

$cat lang.txt

Bash编程语言。Python编程语言。Perl编程语言。

超文本标记语言。

可扩展标记语言。

要用“Scripting”只替换行上最后一个“Programming”实例,请按如下方式运行sed命令:

sed的/(.*)编程/1脚本/'lang.txt

要理解此命令,请注意此sed命令中的模式匹配:(.*)编程,将创建一个捕获组,其中所有文本以贪婪的方式与该行匹配,直到编程的最后一个实例为止。此捕获组存储为“ 1”,并在sed: 1脚本的替换部分中引用。因此,直到最后一个“编程”实例为止的整行匹配将再次包含在替换行中,并以“脚本”字结束该行。这是使其工作的技术,如输出所示:

转到顶部

5.用新文本替换文件中的第一个匹配项

以下命令将仅用文本“perl”替换搜索模式的第一个匹配项“Python”。这里,“1”用于匹配模式的第一次出现。

sed'1s/Python/perl/'Python.txt

运行上述命令后,将出现以下输出。在这里第一行中第一个出现的“Python”被“perl”替换。

转到顶部

6.用新文本替换文件中的最后一个匹配项

以下命令将用文本“Bash”替换上次出现的搜索模式“Python”。这里,“$”符号用于匹配模式的最后一次出现。

sed-e'$s/Python/Bash/'Python.txt

运行上述命令后,将出现以下输出:

转到顶部

7.在替换命令中转义反斜杠以管理文件路径的搜索和替换

为了进行搜索和替换,有必要对文件路径中的反斜杠进行转义。sed的以下命令将在文件路径中添加反斜杠()。

echo/home/ubuntu/code/perl/add.pl|sed的;/;\/;g'

文件路径“/home/ubuntu/code/perl/add.pl”作为sed命令中的输入提供,运行上述命令后将出现以下输出:

转到顶部

8.将所有文件的完整路径替换为文件名无目录

使用basename命令可以很容易地从文件路径中检索文件名。sed命令也可以用于从文件路径中检索文件名。以下命令将仅从echo命令提供的文件路径中检索文件名。

echo“/home/ubuntu/temp/myfile.txt”|sed的/.*///'

运行上述命令后,将出现以下输出。在这里,文件名“myfile.txt”被打印为输出。

转到顶部

9.替换文本,但前提是在字符串中找到其他文本

创建一个名为“dept.txt”的文件,其中包含以下内容,以替换基于其他文本的任何文本:

dept.txt

$cat dept.txt

学生总数列表:

CSE-计数

EEE-计数

Civil-计数

以下sed命令中使用了两个replace命令。这里,在包含文本“CSE”的行中,文本“Count”将被“100”替换,而在包含搜索模式“EEE”的行将文本“Count”替换为“70”。

sed-e'/CSE/s/计数/100//EEE/s/计数/70/;'dept.txt

运行上述命令后,将出现以下输出:

转到顶部

10.替换文本,但前提是在字符串中找不到其他文本

以下sed命令将替换不包含文本“CSE”的行中的“Count”值。dept.txt文件包含两行,其中不包含文本“CSE”。因此,“计数”文本将在两行中替换为80。

sed-i-e'/CSE/!s/计数/80/;'dept.txt

输出

运行上述命令后,将出现以下输出:

转到顶部

11.使用'1'在匹配模式前后添加字符串

“sed”命令的匹配模式序列由“1”、“2”等表示。下面的sed命令将搜索模式“Bash”,如果模式匹配,则在替换文本的部分由“ 1”访问。在这里,在输入文本中搜索文本“Bash”,在“1”之前添加一个文本,在“ 1”之后添加另一个文本。

echo“Bash language”|sed的/(Bash)/Relearn1编程/'

运行上述命令后,将出现以下输出。此处“学习”文本添加在“Bash”之前,“编程”文本添加到“Bassh”之后。

转到顶部

12.删除匹配行

sed命令中使用了“d”选项来删除文件中的任何行。创建一个名为“os.txt”的文件,并添加以下内容来测试“d”选项的功能。

$cat os.txt

窗户

Linux

安卓

OS

以下sed命令将从包含文本“os”的“os.txt”文件中删除这些行:

sed'/OS/d'OS.txt

运行上述命令后,将出现以下输出:

转到顶部

13.删除匹配行和匹配行后的2行

如果找到模式“Linux”,以下命令将从文件os.txt中删除三行。os.txt在第二行包含文本“Linux”。因此,这一行和接下来的两行将被删除。

sed'/Linux/,+2d'os.txt

运行上述命令后,将出现以下输出:


转到顶部

14.删除文本行末尾的所有空格

使用[:blank:]类可以用于从任何文件的文本或内容中删除空格和制表符。以下命令将删除文件“os.txt”每行末尾的空格。由于本例为空白空白,我们将首先查看使用Nano和Alt-P显示空白的文件的屏幕截图:


现在,我们可以运行下面的示例sed命令来删除每行末尾的空白。我们将使用-i命令行对本例进行就地文件编辑/更新,以永久进行更改:

sed-i的/[[:blank:]]*$//'os.txt

现在,我们可以使用nano-Alt-p选项再次查看文件,以查看从行尾删除的空白:

转到顶部

15.删除所有行中有两次匹配的行

在本例中,我们首先创建一个名为“input.txt”的文本文件,其中包含以下内容。此示例代码将两次删除包含搜索模式的文件中的那些行。

$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。

本例中使用了两个sed命令来两次删除那些包含模式“php”的行。第一个sed命令将用“dl”替换每行中第二个出现的“php”。然后,我们将第一个sed输出作为输入管道传输到第二个sed命令中。第二个sed命令将删除那些包含特殊信号文本“dl”的行“dl”在本例中用作“delete line”的信号,但文本中可能也包含“dl”,因此这有点危险。对于生产系统,可以考虑使用“aNh4JPrSf3EXmdkKDpyz8K5u”这样的代码,而不是“dl”,这样可以更随机,或者是您为避免事故而创建的更花哨的技巧。

sed的/php/dl/i2;t'input.txt | sed'/dl/d'

对于这个示例输出,文件“input.txt”有两行,其中包含两次模式“php”。因此,运行上述命令后将出现以下输出:

转到顶部

16.删除所有只有空白的行

对于这个例子,我们在内容中添加了一些空行,以在文件“input.txt”中测试这个例子。这里,“^$”用于查找文件“input.txt”中的空行。

$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。

现在我们运行sed命令来删除空行:

sed'/^$/d'input.txt

运行上述命令后,将出现以下输出:

转到顶部

17.删除所有不可打印的字符

通过将不可打印字符替换为无字符,可以从任何文本中删除不可打印的字符。[:print:]类在本例中用于查找不可打印的字符。't'是不可打印的字符,echo命令无法直接解析它。为此,在回显命令中使用的变量$tab中分配了“t”字符。echo命令的输出在sed命令中发送,该命令将从输出中删除字符“t”。

$tab=$'tt

$echo你好“$tab”世界

$echo Hello“$tab”世界|sed的/[^[:打印:]]//g'

运行上述命令后,将出现以下输出。第一个echo命令将使用选项卡空间打印输出,sed命令将在删除选项卡空间后打印输出。

转到顶部

18.如果行中有匹配项,请在行的末尾添加一些内容

请确保您有一个包含以下内容的文件“os.txt”:

$cat os.txt

窗户

Linux

安卓

OS

以下命令将在“os.txt”文件中包含文本“Windows”的行的末尾附加“10”:

sed'/Windows/s/$/10/'os.txt

运行命令后将显示以下输出:

转到顶部

19.如果行中有匹配项,请在文本前插入一行

对于此示例,请确保您有“input.txt”:

$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。

以下sed命令将在“input.txt”文件中搜索文本“PHP与平台无关”。如果文件中包含此文本,则会在该行之前插入“PHP是一种解释语言”。

sed’/PHP是独立于平台的/s/^/PHP是一种解释语言。n/'input.txt

运行上述命令后,将出现以下输出:

转到顶部

20.如果行中有匹配项,则在该行之后插入一行

下面的sed命令将搜索文件“os.txt”中的文本“Linux”,如果文本存在于任何一行中,则会在该行之后插入新的文本“Ubuntu”。首先创建“os.txt”文件:

$cat os.txt

窗户

Linux

安卓

OS
sed的/Linux/&nBunntu/'os.txt

运行上述命令后,将出现以下输出,添加的换行符插入新文本,并保留“&”特殊变量中的所有旧文本(包括整个匹配项):

转到顶部

21.如果没有匹配项,请在行尾添加一些内容

以下sed命令将搜索“os.txt”中不包含文本“Linux”的行,并在这些行的末尾附加文本“操作系统”。这里,“$”符号用于标识新文本将被替换的行的末尾。请确保您有一个“os.txt”文件:

$cat os.txt

窗户

Linux

安卓

OS

然后运行命令:

sed'/Linux/!s/$/操作系统/'os.txt

运行上述命令后,将出现以下输出。文件os.txt中有三行不包含文本“Linux”,新文本添加在这些行的末尾。

转到顶部

22.如果不匹配,删除该行

创建一个名为“web.txt”的文件,并添加以下内容。

$cat web.txt

HTML 5

Javascript

CSS

PHP

MySQL

JQuery

此sed命令将删除不包含匹配图案的行。 

sed'/CSS/!d'web.txt

运行上述命令后,将出现以下输出。文件中有一行包含文本“CSS”。因此,输出仅包含一行。如果您将模式从“CSS”更改为“J”,您将看到2行输出。

sed’/J/!d'web.txt

转到顶部

23.在文本后面添加空格后复制匹配的文本

以下sed命令将在文件“python.txt”中搜索匹配的单词“very”,如果该单词存在,则将再次插入相同的单词作为重复单词。这里,“&”符号表示匹配文本,我们将其添加两次以进行重复。确保您有“python.txt”:

$cat python.txt

Python是一种非常流行的语言。

Python很容易使用。Python很容易学习。

Python是一种跨平台语言

这是代码:

sed-e's/very/&&/g'python.txt

运行命令后将出现以下输出。你可以看到,我们复制了“非常”,使其“非常非常”:

转到顶部

24.将一个字符串列表替换为另一个列表中的新字符串

您必须创建两个列表文件来测试此示例。创建两个名为“list1.txt”和“list2”的文本文件,并添加以下内容。

$cat list1.text

1001:贾法尔·阿里

1023:Nir Hossain

1067年:约翰·米歇尔
$cat list2.txt

1001 CSE GPA-3.63

1002 CSE GPA-3.24

1023 CSE GPA-3.11

1067 CSE GPA-3.84

我们将把这个过程分解成几个小步骤,使其从复杂变为简单。sed可以将替换命令列表作为文件输入,因此我们的方法是首先使用's'替换运算符创建一个包含相关sed语法替换命令列表的文件。以下是使用另一个低复杂度的名为awk的linux命令创建命令文件的简单代码。请注意,这是一个原始文件的cat,通过管道传输到awk,输出重定向到“command.txt”:

cat list1.text|awk-F:'{printf(“s/%s/%s/n”,$1,$2)}'>命令.txt

通过创建“command.txt”文件,我们可以使用基本的sed命令在“list2.txt”上轻松运行此替换列表:

sed-f command.txt list2.txt

下面的输出显示了替换匹配键和值以及otuput的两个步骤的过程:


转到顶部

25.将匹配的字符串替换为包含换行符的字符串

以下命令将从echo命令中获取输入,并在文本中搜索单词“Python”。如果该单词存在于文本中,则会在新文本中插入一个新文本“添加的文本”,并在其中插入一行换行符。以下是示例代码:

echo“Bash Perl Python Java PHP ASP”|sed的s/Python/Added Textn/'

插入新文本和换行符。运行上述命令后,将出现以下输出:

转到顶部

26.从文件中删除换行符,并在每行末尾插入一个逗号

以下sed命令将用逗号替换文件“os.txt”中的每一个换行符。

$cat os.txt

窗户

Linux

安卓

OS

这里,“-z”选项用于指示sed使用每行分隔的NULL字符而不是换行符来解释输入,这允许在不受干扰的情况下进一步操作文本中的换行符。然后,我们用逗号简单地替换所有换行符“n”:

sed-z's/n/,/g'os.txt

运行上述命令后将出现以下输出,请注意缺少终止换行符,这可能是您的用例所需要的,也可能不是:

转到顶部

27.删除逗号并添加换行符,将文本拆分为多行

以下sed命令将以echo命令中以逗号分隔的行作为输入,并将所有逗号替换为换行符。

echo“Kaniz Fatema,30th,batch”|sed“s/,/n/g”

运行上述命令后,将出现以下输出。输入文本包含三个逗号分隔的数据,这些数据被换行符替换并分三行打印:

转到顶部

28.查找不区分大小写的匹配项并删除行

sed命令中的'I'指示符用于表示忽略大小写的不区分大小写的匹配。下面的sed命令将使用不区分大小写的搜索来搜索包含单词“linux”的行,并从输出中删除该行。设置你的“os.txt”,首先注意大写:

$cat os.txt

窗户

Linux

安卓

OS

然后运行sed命令:

sed'/linux/Id'os.txt

运行上述命令后将出现以下输出。'“os.txt”包含单词“Linux”,该单词与模式匹配,“Linux”表示不区分大小写的搜索,并被删除:

转到顶部

29.查找不区分大小写的匹配项并替换为新文本

以下sed命令将从echo命令中获取输入,并使用命令末尾的不区分大小写指示符“i”将单词“bash”替换为单词“PHP”。

echo“我喜欢bash编程”|sed的s/bash/PHP/I'

运行上述命令后,将出现以下输出。这里,单词“Bash”与单词“Bash”匹配,表示不区分大小写的搜索,并替换为单词“PHP”。

转到顶部

30.查找不区分大小写的匹配项,并替换为相同文本的所有大写字母

sed中使用'U'将任何文本转换为全大写字母。下面的sed命令将在“os.txt”文件中搜索单词“linux”,如果该单词存在,它将用所有大写字母替换该单词。首先创建“os.txt”文件。

$cat os.txt

窗户

Linux

安卓

OS

现在是要运行的命令:

sed的/(linux)/U1/Ig的os.txt

此命令使用sed捕获组(linux)被捕获在 1中,以便在替换中重用。在我们的示例中,'U'与'1'一起使用,以使捕获的匹配转换为大写。还要注意指令末尾的“Ig”命令,它强制执行不区分大小写的全局匹配。运行上述命令后,将出现以下输出。“os.txt文件”中的“Linux”一词替换为“Linux”一词:

转到顶部

31.查找不区分大小写的匹配项,并替换为相同文本的所有小写字母

与前面的大写示例类似,我们将进行不区分大小写的搜索,并将匹配的文本全部替换为小写。

$cat os.txt

窗户

Linux

安卓

OS

sed中使用'L'将任何文本转换为所有小写字母,我们再次使用捕获组来查找(linux)的匹配文本,并存储为'1'以用于小写。以下是命令:

sed的/(linux)/L1/Ig的os.txt

运行上述命令后,将出现以下输出。此处的单词“Linux”替换为单词“Linux”:

转到顶部

32.将文本的所有大写字符替换为小写字符

以下sed命令将搜索文件“os.txt”中的所有字符,并使用“L”将这些字符替换为小写字母。

以下是数据文件:

$cat os.txt

窗户

Linux

安卓

OS

下面是要运行的sed命令:

sed的s/(.*)/L1/'os.txt

运行上述命令后将出现以下输出,请注意,这是有效的,因为我们创建了一个捕获组“1”并对其使用小写命令:“L”。

转到顶部

33.搜索行中的数字,并在数字前附加任何货币符号

创建一个名为“items.txt”的文件,其中包含以下内容:

$cat项目.txt

HDD 100

监视器80

鼠标10

以下sed命令将在“items.txt”文件的每一行中搜索第一个匹配的数字,并在每个数字之前附加货币符号“$”。

$cat项目.txt

$sed的s/([0-9])/$1/'items.txt

运行上述命令后,将出现以下输出。在这里,“$”符号被添加到每一行的编号之前。注意,我们不使用“g”表示全局,我们只匹配第一个数字,如果示例需要每行包含多个多位数,则需要更复杂的解决方案。

转到顶部

34.在超过3位的数字中添加逗号

下面的sed命令将从echo命令中获取一个数字作为输入,并在从右边开始计数的每组三位数字后添加一个逗号。这里,“:a”表示标签,当匹配为true时,“ta”用于有条件地迭代标签“a”上的分组过程。

echo“5098673”|sed-e:a-e的/(.*[0-9])([0-9]{3})/1,2/;ta’

编号5098673在echo命令中给出。它是一个子站点命令,具有用“ta”引用的条件标签“a”。搜索模式是任意一位数字,后面正好跟有3位数字。找到替换模式时,捕获组“1”由“,”和捕获组“ 2”分隔。因此,循环是通过产生输出的整个字符串来完成的:

转到顶部

35.将制表符替换为4个空格字符

以下sed命令将用四个空格字符替换每个制表符。'sed命令中使用t'符号来匹配制表符,使用'g'全局替换所有匹配项。这是代码:

echo-e“1t2t3”|sed$'s/t//g'

运行上述命令后,将出现以下输出:


让我们看第二个使用Nano和Alt-P替换选项卡的例子,以显示前后可见的空白。

文件之前:


sed命令:

sed的s/t//g'input.txt>output.txt

替换后的文件:

转到顶部

36.用制表符替换4个连续空格字符

与上面的示例35正好相反,我们将在用连续空格替换之前显示一个文本文件,然后使用“t”ascii代码替换制表符。

如下所示的Before和After文件,请注意Nano的“Alt-P”可以显示空白标记:

用小点表示的空白

由彩色小标记指示的选项卡

以下是本例中用于将4个空格替换为制表符的命令:

sed-e's//t/g'input.txt>output.txt

转到顶部

37.将所有行截断为前80个字符

创建一个名为input.txt的文本文件,其中包含超过80个字符的行以测试此示例。

linuxhint@u20:~$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。我喜欢说很多话,讨厌被打断:)
sed的/(^.{1,80}).*/1/'输入.txt

运行上述命令后,将出现以下输出,我们剪掉长行:

linuxhint@u20:~$sed的s/(^.{1,80}).*/1/'输入.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。我喜欢说很多话,讨厌当我

linuxhint@u20:~$

转到顶部

38.搜索字符串regex并在其后面附加一些标准文本

下面的sed命令将搜索输入文本中的文本“hello”,并在该文本后面附加文本“John”。

echo“你好,你好吗?”|sed的/(hello)/1 John/

此代码使用替换字符串中引用为“1”的捕获组“(hello)”来工作。运行上述命令后将出现以下输出:

linuxhint@u22:~$echo“你好吗?”|sed的/(hello)/1 John/

你好,约翰,你好吗?

linuxhint@u22:~$

转到顶部

39.搜索字符串regex,并在每行的第二个匹配项后附加一些文本

您可能希望仅在每行第二个(或其他数字)匹配时替换字符串。让我们创建一个数据文件“input.txt”:

linuxhint@u22:~$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。

下面的sed命令将在“input.txt”的每行中搜索文本中的“PHP”,并将每行中的第二个匹配项替换为文本“New text Added”。

sed的/(PHP)/1(添加了新文本)/2'input.txt

运行上述命令后,将出现以下输出。搜索文本“PHP”在“input.txt”文件的第二行和第三行出现两次。因此,在第二次匹配后的第二行和第三行插入文本“添加了新文本”:

转到顶部

40.从文件运行多行sed脚本

多个sed命令可以存储在一个文件中,所有命令都可以通过运行sed命令一起执行。为了证明这一点,请确保您有“input.txt”:

linuxhint@u22:~$cat input.txt

PHP是一种服务器端脚本语言。

PHP是一种开源语言,并且区分大小写。

PHP是独立于平台的。PHP更快。

创建一个名为“sedcmd”的文件,并添加以下内容:

s/PHP/ASP/

s/独立/依赖/

上面,文件中添加了两个sed命令。一个命令将文本“PHP”替换为“ASP”,另一个命令则将文本“独立”替换为文本“依赖”。sed命令中使用了“-f”选项来执行文件中的所有命令。

sed-f sedcmd input.txt

运行以上命令后,将显示以下输出:

转到顶部

41.匹配多行模式并替换为新的多行文本

下面的sed命令将搜索多行文本“LinuxnAndroid”,如果模式匹配,则匹配的行将被新的多行文本”UbuntunAndroidLollipop“替换。”os.txt的数据文件在这里:

$cat os.txt

窗户

Linux

安卓

OS

sed命令在这里:

sed'$!Ns/LinuxnAndroid/UbuntunAndroid棒棒糖/;PD'os.txt

这里,P和D用于多行处理。运行上述命令后,将出现以下输出:

转到顶部

42.替换文本中与模式匹配的两个单词的顺序

下面的sed命令将从echo命令中获取两个单词的输入,并替换这些单词的顺序。

echo“perl-python”|sed-e的/([^]*)*([^]*)/21/'

此代码使用两个捕获组来获得用空格分隔的第一个和第二个单词,然后在输出中反转捕获组的顺序:“2”“1”。以下是输出:

linuxhint@u22:~$echo“perl-python”|sed-e的/([^]*)*([^]*)/21/'

python perl

linuxhint@u22:~$

转到顶部

43.从命令行执行多个sed命令

“-e”与用分号分隔的多个sed命令组合时,可以组合在一起。下面的sed命令将从echo命令中获取文本作为输入,并将“Ubuntu”替换为“Kubuntu”,将“Centos”替换为”Fedor“。

$echo“Ubuntu Centos Debian”|sed-e's/Ubuntu/Kubuntu/;s/Centos/Fedora/'

注意,由于分隔分号,多个“s/”命令与一个sed组合在一起。运行上述命令后将出现以下输出,“Ubuntu”和“Centos”将被“Kubuntu”和“Fedora”替换:

转到顶部

44.将sed与其他命令相结合

以下命令将sed命令与cat命令结合使用。在本例中,cat命令用于生成到stdout的输出。第一个sed命令将从“os.txt”文件中获取输入,并在将文本“Linux”替换为“Fedora”后将命令的输出发送给第二个sed命令。第二个sed命令将文本“Windows”替换为“Windows 10”。这3个命令与linux管道相结合。

这是“OS.txt”文件:

$cat os.txt

窗户

Linux

安卓

OS

下面是要运行的命令:

cat os.txt |sed的/Linux/Fedora/'|sed的/windows/windows 10/i'

运行上述命令后,将出现以下输出:

转到顶部

45.在文件中插入空行

创建一个名为“stdlist”的文件,其中包含以下内容:

$cat标准列表

#ID#姓名

[101]-阿里

[102]-尼哈

sed的“G”选项用于在文件中的每一行之后插入空行。您可以将其视为将单间距文件转换为双间距文件,每一行之间都有一个空行。以下是命令示例:

sed G标准列表

运行上述命令后,将出现以下输出。在文件的每一行之后插入一个空行:

linuxhint@u22:~$sed G标准列表

#ID#姓名

[101]-阿里

[102]-尼哈

linuxhint@u22:~$

转到顶部

46.在文件的每一行中用空格替换所有字母数字字符。

以下命令将用空格替换“stdlist”文件中的所有字母数字字符,该文件的内容如下所示:

$cat标准列表

#ID#姓名

[101]-阿里

[102]-尼哈

此sed命令的工作原理是匹配大写、小写以及整数的所有字母字符,并使用sed的“s”替换命令和“g”全局修饰符:

sed的/[A-Za-z0-9]//g'标准列表

运行上述命令后,将出现以下输出:

linuxhint@u22:~$sed的/[A-Za-z0-9]//g'标准列表

#     #

[]   -

[]   -

linuxhint@u22:~$

转到顶部

47.使用“&”打印匹配的字符串

以下命令将搜索以“L”开头的单词,并通过使用“&”符号将“Matched String is-”附加为匹配的单词来替换文本。在本例中,“p”用于打印修改后的文本。“os.txt”文件用于以下内容:

$cat os.txt

窗户

Linux

安卓

OS

这是命令,请注意用于表示行首的“^”:

sed-n的/^L/匹配字符串为-&&/p'os.txt

请注意,使用“p”命令时,输出中仅打印匹配的行:

转到顶部

48.切换文件中的成对单词

创建一个名为“course.txt”的文本文件,其中包含以下内容,每行包含一对单词:

$cat课程.txt

PHP ASP

MySQL Oracle

CodeIgniter Laravel

以下命令将切换文件“course.txt”每行中的成对单词

sed的/([^]*)*([^]*)/21'course.txt

切换每行中的成对单词后,将出现以下输出。这是一组由2个捕获组组成的集合,它们在的'替换的输出中反转:

转到顶部

49.将每个单词的第一个字符大写

下面的sed命令将从echo命令中获取输入文本,并将每个单词的第一个字符转换为大写字母。该命令具有2个捕获组,并且仅将第一个捕获组大写:

echo“我喜欢bash编程”|sed的/([a-z])([a-zA-Z0-9]*)/u12/g'

运行上述命令后,将出现以下输出。输入文本“I like bash programming”在将第一个单词大写后打印为“I like bash programming”:

转到顶部

50.打印文件的行号

假设我们想在如下所示的示例文件中打印行号:

$cat os.txt

窗户

Linux

安卓

OS

sed命令中使用“=”符号在文件的每一行之前打印行号。以下命令将打印带有行号的“os.txt”文件的内容:

sed'='os.txt

运行上述命令后,将出现以下输出。“os.txt”文件中有四行。行号打印在文件的每一行之前:

转到顶部

结论

本教程中使用非常简单的示例来解释sed命令的不同用法。这里提到的所有sed脚本的输出都是临时生成的,原始文件的内容保持不变。但如果需要,可以使用sed命令的-i或-in-place选项修改原始文件。如果你是一个新的Linux用户,并且想学习sed命令执行各种类型的字符串操作任务的基本用法,那么本教程将对你有所帮助。

常见问题

sed命令的用途是什么?

sed命令有许多不同的用途。也就是说,主要用法是替换文件中的单词,或者查找和替换。sed的伟大之处在于,你可以在文件中搜索单词并替换它,但你甚至不必打开文件——sed只是为你做这一切!除此之外,它还可以用于删除。你所需要做的就是在sed中键入你想要查找、替换或删除的单词,它会为你显示出来——然后你可以选择替换该单词或从文件中删除该单词的所有痕迹。sed是一个极好的工具,可以替换IP地址和任何你不想放在文件中的高度敏感的东西。sed是任何软件工程师、系统管理员或开发操作工程师都必须知道的!

sed命令中的s和g是什么?

用最简单的术语来说,可以在sed中使用的“s”函数的意思就是“替换”。键入“s”后,您可以替换或替换任何您想要的内容——只需键入“s’”将只替换单词在一行中的第一个出现。在sed命令的末尾指定“g”修饰符将进行全局替换(这就是g所代表的)。考虑到这一点,如果您指定“g”,它将用“s”替换您选择的单词的每次出现,而不仅仅是第一次出现的默认行为。

如何运行sed脚本?

您可以通过多种方式运行sed脚本,但最常见的是在命令行上。在这里,您只需指定sed和要对其使用命令的文件。这允许您对该文件使用sed,允许您根据需要查找、删除和替换。你也可以在shell脚本中使用它,这样你就可以将你想要的任何东西传递给脚本,它会为你运行find和replace命令。这对于不想在脚本中指定高度敏感的数据非常有用,因此可以将其作为变量传入。

sed中的捕获组是什么

捕获组允许程序员创建正则表达式来查找匹配的文本,然后将这些匹配作为指定的变量来对替换的输出中的进行操作,如更改输出的顺序、使用大写命令进行修改或任何其他sed修改。捕获组允许以复杂的方式捕获和重用与模式匹配的动态文本。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论