云网牛站
所在位置:首页 > Linux命令 > 在Linux系统中使用sed命令查找和替换文件中的字符串的16个示例

在Linux系统中使用sed命令查找和替换文件中的字符串的16个示例

2019-09-13 09:46:33作者:戴进稿源:云网牛站

本文介绍在Linux操作系统中使用sed命令查找和替换文件中的字符串的16个示例,我们将向您展示如何使用sed命令执行此操作,然后显示有关awk命令的信息。在处理文本文件时,可能需要查找并替换文件中的字符串,Sed命令主要用于替换文件中的文本,这可以使用Linux中的sed命令和awk命令来完成。

在Linux系统中使用sed命令查找和替换文件中的字符串的16个示例

 

什么是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

 

相关主题

检查字符串是否包含Bash中的子字符串

Linux命令子频道
精选文章
热门文章