本文介绍在Linux操作系统中使用sed命令查找和替换文件中的字符串的16个示例,我们将向您展示如何使用sed命令执行此操作,然后显示有关awk命令的信息。在处理文本文件时,可能需要查找并替换文件中的字符串,Sed命令主要用于替换文件中的文本,这可以使用Linux中的sed命令和awk命令来完成。
什么是sed命令 Sed命令代表Stream Editor,它用于在Linux中执行基本的文本操作,它可以执行各种功能,如搜索、查找、修改、插入或删除文件。参考在Linux系统中使用sed命令从文件中删除行,附实例解析。 此外,它正在执行复杂的正则表达式模式匹配。 它可用于以下目的: 1、查找和替换给定格式的匹配项。 2、查找和替换与给定格式匹配的特定行。 3、查找并替换与给定格式匹配的整行。 4、同时搜索和替换两种不同的模式。 本文中列出的16个示例将帮助您掌握sed命令。 注意:由于这是一篇演示文章,我们使用不带-i选项的sed命令,它删除行并在Linux终端中打印文件的内容。但是,如果要在真实环境中从源文件中删除行,请在sed命令中使用-i选项。 用于替换字符串的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:Global替换标志,默认情况下,sed命令替换每行中第一次出现的模式,它不会替换行中的另一个出现,但是,当提供替换标志时,将替换所有出现的事件 /:分隔符。 Input_File:要执行操作的文件名。 让我们看一些常用于sed命令的示例来搜索和转换文件中的文本。 我们创建了以下文件用于演示目的: # cat sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system
在Linux系统中使用sed命令查找和替换文件中的字符串的16个示例 1)如何查找和替换线上模式的“first”事件 下面的sed命令在文件中替换了unix和linux,这仅更改每行上的第一个模式实例: # sed 's/unix/linux/' sed-test.txt 1 Unix linux unix 23 2 linux Linux 34 3 linuxlinux UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 2)如何查找和替换线上模式的“Nth”次发生 使用/1,/2,../n标志替换行中模式的相应匹配项。 下面的sed命令用“linux”替换“unix”模式的第二个实例: # sed 's/unix/linux/2' sed-test.txt 1 Unix unix linux 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 3)如何搜索和替换行中模式的所有实例 下面的sed命令将“unix”格式的所有实例替换为“Linux”,因为“g”表示全局替换: # sed 's/unix/linux/g' sed-test.txt 1 Unix linux linux 23 2 linux Linux 34 3 linuxlinux UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 4)如何从“Nth”事件中查找和替换行中所有实例的模式 下面的sed命令替换了一行中模式的“Nth”个实例的所有模式: # sed 's/unix/linux/2g' sed-test.txt 1 Unix unix linux 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 5)搜索并替换特定行号上的模式 您可以替换特定行号上的字符串,下面的sed命令仅在第3行替换模式“unix”和“linux”: # sed '3 s/unix/linux/' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxlinux UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 6)如何查找和替换一系列行中的模式 您可以指定行号的范围以替换字符串。 下面的sed命令用“Linux”替换“Unix”模式,第1行到第3行: # sed '1,3 s/unix/linux/' sed-test.txt 1 Unix linux unix 23 2 linux Linux 34 3 linuxlinux UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 7)如何查找和更改最后一行中的模式 以下sed命令允许您仅在最后一行替换匹配的字符串。 下面的sed命令仅在最后一行用“Unix”替换“Linux”模式: # sed '$ s/Linux/Unix/' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Unix is free and opensource operating system 8)如何在一行中仅用正确的单词查找和替换模式 您可能已经注意到,在第6个示例中,子串“linuxunix”被替换为“linuxlinux”,如果要仅替换正确的匹配单词,请在搜索字符串的两端使用单词边界表达式“\b”: # sed '1,3 s/\bunix\b/linux/' sed-test.txt 1 Unix linux unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 9)如何搜索和替换不区分大小写的模式 每个人都知道Linux是区分大小写的,要使模式与不区分大小写匹配,请使用I参数: # sed 's/unix/linux/gI' sed-test.txt 1 linux linux linux 23 2 linux Linux 34 3 linuxlinux linuxLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 10)如何查找和替换包含分隔符字符的字符串 当您使用分隔符搜索和替换字符串时,我们需要使用反斜杠“\”来转义斜杠。 在这个例子中,我们将用“/usr/bin/fish”替换“/bin/bash”: # sed 's/\/bin\/bash/\/usr\/bin\/fish/g' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /usr/bin/fish CentOS Linux OS Linux is free and opensource operating system 上面的sed命令按预期工作,但看起来很糟糕,为了简化这一点,大多数人将使用垂直条“|”,所以,我建议你顺其自然: # sed 's|/bin/bash|/usr/bin/fish/|g' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /usr/bin/fish/ CentOS Linux OS Linux is free and opensource operating system 11)如何使用给定模式查找和替换数字 同样,数字可以用模式替换。下面的sed命令用“[0-9]”“number”模式替换所有数字: # sed 's/[0-9]/number/g' sed-test.txt number Unix unix unix numbernumber number linux Linux numbernumber number linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 12)如何仅使用模式查找和替换两个数字 如果要用模式替换两位数字,请使用下面的sed命令: # sed 's/\b[0-9]\{2\}\b/number/g' sed-test.txt 1 Unix unix unix number 2 linux Linux number 3 linuxunix UnixLinux linux /bin/bash CentOS Linux OS Linux is free and opensource operating system 13)如何使用sed命令仅打印替换行 如果只想显示更改的行,请使用以下sed命令: p:在终端上打印两次更换的线路。 n:它抑制“p”参数生成的重复行。 # sed -n 's/Unix/Linux/p' sed-test.txt 1 Linux unix unix 23 3 linuxunix LinuxLinux 14)如何一次运行多个sed命令 以下sed命令同时检测并替换两个不同的模式。 下面的sed命令搜索“linuxunix”和“CentOS”模式,一次用“LINUXUNIX”和“RHEL8”替换它们: # sed -e 's/linuxunix/LINUXUNIX/g' -e 's/CentOS/RHEL8/g' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 LINUXUNIX UnixLinux linux /bin/bash RHEL8 Linux OS Linux is free and opensource operating system 以下sed命令搜索两个不同的模式,并一次用一个字符串替换它们。 下面的sed命令搜索“linuxunix”和“CentOS”模式,一次用“Fedora30”替换它们: # sed -e 's/\(linuxunix\|CentOS\)/Fedora30/g' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 Fedora30 UnixLinux linux /bin/bash Fedora30 Linux OS Linux is free and opensource operating system 15)如果给定模式匹配,如何查找和替换整行 如果模式匹配,则可以使用sed命令将整行替换为新行,这可以使用“C”参数来完成: # sed '/OS/ c New Line' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux New Line Linux is free and opensource operating system 16)如何搜索和替换匹配模式的行 您可以为sed命令指定模式以适合一行,在模式匹配的情况下,sed命令搜索要替换的字符串。 下面的sed命令首先查找具有“OS”模式的行,然后将“Linux”替换为“ArchLinux”: # sed '/OS/ s/Linux/ArchLinux/' sed-test.txt 1 Unix unix unix 23 2 linux Linux 34 3 linuxunix UnixLinux linux /bin/bash CentOS ArchLinux OS Linux is free and opensource operating system
相关主题 |