当您处理文本文件时,您很可能需要查找和替换文件中的字符串。sed命令主要用于替换文件中的文本。在Linux中,这可以使用sed命令和awk命令来完成。在本教程中,我们将向您展示如何使用sed命令执行此操作,然后讨论相关的awk命令。什么是sed命令?sed命令代表StreamEditor,用于在Linux上执行基本的文本操作。它可以执行各种功能,例如搜索、查找、修改、插入或删除文件。此外,它还可以执行复杂的正则表达式匹配。它可用于以下目的:查找和替换与给定模式匹配的内容。在指定行中查找并替换与给定模式匹配的内容。查找并替换与给定模式匹配的所有行。同时搜索和替换两种不同的模式。本文列出了十五个示例来帮助您掌握sed命令。如果要使用sed命令删除文件中的行,请转到以下文章。注意:由于这是一篇演示文章,我们使用的是不带-i选项的sed命令,它会删除行并在Linux终端中打印文件内容。但是,在实际环境中,如果要删除源文件中的行,请使用带有-i选项的sed命令。用于替换字符串的常用sed语法。sed-i's/Search_String/Replacement_String/g'Input_File首先我们需要了解sed语法来执行此操作。请参阅相关详情。sed:这是一个Linux命令。-i:这是sed命令的一个选项,有什么作用?默认情况下,sed将结果打印到标准输出。当您使用sed添加此选项时,它会就地修改文件。添加后缀(例如-i.bak)时,将创建原始文件的备份。s:字母s是替换命令。Search_String:搜索给定的字符串或正则表达式。Replacement_String:替换字符串。g:全局替换标志。默认情况下,sed命令替换每行中第一次出现的模式,它不会替换该行中的其他匹配项。但是,当提供替换标志时,将替换所有匹配项。/:分隔符。Input_File:要对其执行操作的文件的名称。让我们看一些使用sed命令搜索和转换文件中文本的常见示例。我们创建了以下文件用于演示。#catsed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统1)如何查找和替换一行中的“第一个”模式匹配项以下sed命令替换为linuxunix文件中。这只会更改每一行上模式的第一个实例。#sed's/unix/linux/'sed-test.txt1Unixlinuxunix232linuxLinux343linuxlinuxUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统2)如何在每一行中查找和替换“第N次”出现的模式使用行上的/1、/2.../n等标志来替换相应的匹配项。以下sed命令在一行中用linux替换了unix模式的第二个实例。#sed's/unix/linux/2'sed-test.txt1Unixunixlinux232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统3)如何搜索和替换一行中的所有模式下面的示例sed命令用linux替换了unix格式的所有实例,因为g是一个全局替换标志。#sed's/unix/linux/g'sed-test.txt1Unixlinuxlinux232linuxLinux343linuxlinuxUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统4)如何查找和替换“第N个”中的一行下面的sed命令会在一行中替换以模式的“第N个”开头的模式的所有匹配实例。#sed's/unix/linux/2g'sed-test.txt1Unixunixlinux232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统5)在特定行号处的搜索和替换模式下,您可以在特定行号处替换字符串。以下sed命令仅将第三行的unix模式替换为linux。#sed'3s/unix/linux/'sed-test.txt1Unixunixunix232linuxLinux343linuxlinuxUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统6)在特定行号范围之间搜索和替换模式可以为r指定一系列行号替换字符串。以下sed命令在1到3行内将Unix模式替换为linux。#sed'1,3s/unix/linux/'sed-test.txt1Unixlinuxunix232linuxLinux343linuxlinuxUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费开源操作系统7)如何查找和修改模式最后一行如下sed命令允许您仅在最后一行替换匹配的字符串。下面的sed命令仅在最后一行将Linux模式替换为Unix。#sed'$s/Linux/Unix/'sed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSUnix是免费的开源操作系统8)如何只查找和替换正确的模式在一行匹配中,你可能已经注意到,在第六个例子中,子字符串linuxunix被替换成了linuxlinux。如果只想更改正确的匹配词,则在搜索字符串的两端使用此边界字符\b。#sed'1,3s/\bunix\b/linux/'sed-test.txt1Unixlinuxunix232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统9)众所周知,Linux区分大小写。要匹配不区分大小写的模式,请使用I标志。#sed's/unix/linux/gI'sed-test.txt1linuxlinuxlinux232linuxLinux343linuxlinuxlinuxLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统10)如何查找和替换包含定界符的字符串当你使用分隔符搜索和替换字符串,我们需要使用反斜杠\来取消转义。在此示例中,我们将用/usr/bin/fish替换/bin/bash。#sed's/\/bin\/bash/\/usr\/bin\/fish/g'sed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxlinux/usr/bin/fishCentOSLinuxOSLinux是免费的,开源操作系统上面的sed命令按预期工作,但看起来很糟糕。为简单起见,大多数人会使用竖线|作为正则表达式中的定位器。所以,我建议你使用它。#sed's|/bin/bash|/usr/bin/fish/|g'sed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxlinux/usr/bin/fish/CentOSLinuxOSLinux是免费的开源操作系统11)如何用给定的模式查找和替换数字同样,数字可以用模式替换。以下sed命令将所有数字替换为[0-9]作为数字。#sed's/[0-9]/number/g'sed-test.txtnumberUnixunixunixnumbernumbernumberlinuxLinuxnumbernumbernumberlinuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统12)如何仅查找和替换withpattern两位数如果要用模式替换两位数,请使用以下sed命令。#sed's/\b[0-9]\{2\}\b/number/g'sed-test.txt1Unixunixunixnumber2linuxLinuxnumber3linuxunixUnixLinuxlinux/bin/bashCentOSLinuxOSLinux是免费的开源操作系统system13)如何使用sed命令只打印被替换的行如果你想只显示改变的行,使用下面的sed命令。p-它在终端上两次输出替换行。-n-这会抑制p标志产生的重复行。#sed-n's/Unix/Linux/p'sed-test.txt1Linuxunixunix233linuxunixLinuxLinux14)如何同时运行多个sed命令以下sed命令同时检测和替换两种不同的模式。以下sed命令搜索linuxunix和CentOS模式,并立即将它们替换为LINUXUNIX和RHEL8。#sed-e's/linuxunix/LINUXUNIX/g'-e's/CentOS/RHEL8/g'sed-test.txt1Unixunixunix232linuxLinux343LINUXUNIXUnixLinuxlinux/bin/bashRHEL8LinuxOSLinux是免费和开源的操作系统系统下面的sed命令搜索并替换两种不同的模式,并一次用一个字符串替换它们。以下sed命令搜索linuxunix和CentOS模式并将它们替换为Fedora30。#sed-e's/\(linuxunix\|CentOS\)/Fedora30/g'sed-test.txt1Unixunixunix232linuxLinux343Fedora30UnixLinuxlinux/bin/bashFedora30LinuxOSLinux是免费的开源操作系统15)如果给出给定模式匹配,如何查找和替换整行如果模式匹配,您可以使用sed命令将整行替换为新行。这可以通过使用c标志来完成。#sed'/OS/c\NewLine'sed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxNewLineLinux是免费的开源操作系统16)如何搜索和替换匹配的模式行指定适当的模式。在模式匹配的地方,sed命令搜索要替换的字符串。下面的sed命令首先查找带有操作系统模式的行,然后用ArchLinux替换单词Linux。#sed'/OS/s/Linux/ArchLinux/'sed-test.txt1Unixunixunix232linuxLinux343linuxunixUnixLinuxlinux/bin/bashCentOSArchLinuxOSLinux是免费的开源操作系统
