31+个Linux sed命令在文本操作中的用法示例

2021年9月15日23:18:15 发表评论 894 次浏览

在上一篇文章中,我们讨论了bash 函数以及如何直接从命令行使用它们,我们还看到了其他一些很酷的东西。今天我们将讨论一个方便的字符串操作工具,称为 sed 或 sed Linux 命令。

我们使用 sed 来处理文本文件,如日志文件、配置文件和其他文本文件。

如何使用Linux sed命令?在这篇文章中,我们将重点介绍 sed Linux 命令,包括相关的Linux sed命令用法示例,它用于文本操作,这是我们 bash 脚本编写之旅中必不可少的一步。

Linux系统提供了一些文本处理工具;其中一种工具是Linux sed命令文本操作。

我们将用图片讨论 31+ 个sed命令用法示例,以显示每个示例的输出。

Linux sed命令教程目录

  • 了解 sed Linux 命令
  • 在命令行中使用多个 sed Linux 命令
  • 从文件中读取命令
  • 替换标志
  • 替换字符
  • 限制 sed
  • 删除行
  • 插入和附加文本
  • 修改行
  • 变换字符
  • 打印行号
  • 从文件中读取数据
  • 有用的例子

了解 sed Linux 命令

sed 命令是一个非交互式文本编辑器。sed Linux 命令根据你提供的规则编辑数据;你可以这样使用它:

$ sed options file

你不仅限于使用 sed 来操作文件;你可以像这样直接将它应用到STDIN:

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'
31+个Linux sed命令在文本操作中的用法示例

s 命令用第二个文本模式替换第一个文本。在本例中,我们将字符串“website”替换为“page”一词。

上面的示例是演示该工具的简单示例。我们也可以使用 sed Linux 命令来操作文件。

让我们创建一个示例文件:

31+个Linux sed命令在文本操作中的用法示例
$ sed 's/test/another test/' ./myfile

结果即时打印到屏幕上;你不必等待处理文件到最后。

如果你的文件足够大,你将在处理完成之前看到结果。

Sed Linux 命令不会更新你的数据。它只将更改后的文本发送到STDOUT。该文件仍然保持不变。如果你需要覆盖现有内容,你可以查看我们之前的帖子,该帖子讨论了重定向。

在命令行中使用多个 sed Linux 命令

如何使用Linux sed命令?要运行多个 sed 命令,你可以使用 -e 选项,如下所示:

$ sed -e 's/This/That/; s/test/another test/' ./myfile
31+个Linux sed命令在文本操作中的用法示例

你必须用不带任何空格的分号分隔 sed 命令。

此外,你可以使用单引号来分隔这样的命令:

$ sed -e '

> s/This/That/

> s/test/another test/' myfile
31+个Linux sed命令在文本操作中的用法示例

同样的结果,没什么大不了的。

从文件中读取命令

你可以将 sed 命令保存在文件中,并通过使用 -f 选项指定文件来使用它们。

$ cat mycommands

s/This/That/

s/test/another test/
$ sed -f mycommands myfile
31+个Linux sed命令在文本操作中的用法示例

Linux sed命令用法示例:替换标志

仔细看下面的例子:

$ cat myfile
$ sed 's/test/another test/' myfile
31+个Linux sed命令在文本操作中的用法示例

上面的结果表明我们替换了每行中的第一个出现。要替换所有出现的模式,请使用以下替换标志之一。

我们可以这样写标志:

s/pattern/replacement/flags

有四种类型的替换:

  • g、替换所有出现的。
  • 一个数字,即要替换的新文本的出现次数。
  • p、打印原始内容。
  • w file:表示将结果写入文件。

你可以通过指定应替换的出现次数来限制替换,如下所示:

$ sed 's/test/another test/2' myfile
31+个Linux sed命令在文本操作中的用法示例

如你所见,我们只替换了每行中的第二个。

g 标志意味着全局,这意味着所有出现的全局替换:

$ sed 's/test/another test/g' myfile
31+个Linux sed命令在文本操作中的用法示例

p 标志打印包含模式匹配的每一行,你可以使用 -n 选项仅打印修改后的行。

$ cat myfile
$ sed -n 's/test/another test/p' myfile
31+个Linux sed命令在文本操作中的用法示例

w 标志将输出保存到指定的文件:

$ sed 's/test/another test/w output' myfile
31+个Linux sed命令在文本操作中的用法示例

我们在屏幕上打印输出,但我们将匹配的行保存到输出文件中。

Linux sed命令教程:替换字符

Linux sed命令文本操作:假设你想使用sed在/etc/passwd文件中搜索bash shell并用csh shell替换它,好吧,你可以很容易地做到:

$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

哦!!那看起来很可怕。

幸运的是,还有另一种方法可以实现这一目标。你可以使用感叹号 (!) 作为字符串分隔符,如下所示:

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

现在更容易阅读了。

如何使用Linux sed命令?限制 sed

sed 命令处理你的整个文件。但是,你可以限制 sed 命令处理特定行;有两种方法:

  • 一系列线。
  • 匹配特定行的模式。

你可以键入一个数字以将其限制为特定行:

$ sed '2s/test/another test/' myfile
31+个Linux sed命令在文本操作中的用法示例

我们只修改了第二行。

使用一系列行怎么样:

$ sed '2,3s/test/another test/' myfile
31+个Linux sed命令在文本操作中的用法示例

此外,我们可以从一行开始到文件末尾:

$ sed '2,$s/test/another test/' myfile
31+个Linux sed命令在文本操作中的用法示例

或者你可以使用这样的模式:

$ sed '/likegeeks/s/bash/csh/' /etc/passwd
31+个Linux sed命令在文本操作中的用法示例

惊人的!!

你可以使用正则表达式来编写此模式,使其更加通用和有用。

删除行

Linux sed命令文本操作:要使用 sed 删除行,你可以使用 delete (d) 标志是你的朋友。

删除标志从流中删除文本,而不是原始文件。

$ sed '2d' myfile
31+个Linux sed命令在文本操作中的用法示例

这里我们只从 myfile 中删除第二行。

删除一系列行怎么样?

$ sed '2,3d' myfile
31+个Linux sed命令在文本操作中的用法示例

在这里,我们删除了一系列行,第二行和第三行。

另一种类型的范围:

$ sed '3,$d' myfile
31+个Linux sed命令在文本操作中的用法示例

这里我们从第三行删除到文件末尾。

所有这些示例都不会修改你的原始文件。

$ sed '/test 1/d' myfile
31+个Linux sed命令在文本操作中的用法示例

这里我们使用一个模式来删除第一行匹配的行。

如果你需要删除一系列行,你可以使用如下两种文本模式:

$ sed '/second/,/fourth/d' myfile
31+个Linux sed命令在文本操作中的用法示例

我们从第二行删除到第四行。

Linux sed命令用法示例:插入和附加文本

你可以使用以下标志插入或附加文本行:

  • (i) 标志。
  • (a) 标志。
$ echo "Another test" | sed 'i\First test '
31+个Linux sed命令在文本操作中的用法示例

我们在指定行之前添加了文本。

$ echo "Another test" | sed 'a\First test '
31+个Linux sed命令在文本操作中的用法示例

我们在指定的行之后添加了文本。

那么,在中间添加文本怎么样?

很简单,看下面的例子:

$ sed '2i\This is the inserted line.' myfile
31+个Linux sed命令在文本操作中的用法示例

附加的工作方式相同,但请查看附加文本的位置:

$ sed '2a\This is the appended line.' myfile
31+个Linux sed命令在文本操作中的用法示例

我们使用了相同的标志,但有一个插入或附加的位置。

修改行

要修改特定行,你可以使用 (c) 标志,如下所示:

$ sed '3c\This is a modified line.' myfile
31+个Linux sed命令在文本操作中的用法示例

你可以使用正则表达式模式,所有匹配该模式的行都将被修改。

$ sed '/This is/c Line updated.' myfile
31+个Linux sed命令在文本操作中的用法示例

变换字符

变换标志 (y) 对这样的字符起作用:

$ sed 'y/123/567/' myfile
31+个Linux sed命令在文本操作中的用法示例

我们将转换应用于所有数据,我们不能将其限制为特定事件。

打印行号

你可以使用 (=) 符号打印行号,如下所示:

$ sed '=' myfile
31+个Linux sed命令在文本操作中的用法示例

但是,通过将 -n 与等号结合使用,sed 命令会显示包含匹配项的行号。

$ sed -n '/test/=' myfile
31+个Linux sed命令在文本操作中的用法示例

Linux sed命令文本操作:从文件中读取数据

你可以使用 (r) 标志从文件中读取数据。

你可以为要阅读的文本定义行号或文本模式。

$ cat newfile
$ sed '3r newfile' myfile
31+个Linux sed命令在文本操作中的用法示例

我们按预期在第三行之后插入了内容。

这是使用文本模式:

$ sed '/test/r newfile' myfile
31+个Linux sed命令在文本操作中的用法示例

酷吧?

如何使用Linux sed命令?有用的例子

假设我们有一个包含带有占位符的文本的文件,并且我们有另一个文件包含将填​​充另一个文件上的占位符的数据。

我们将使用 (r) 和 (d) 标志来完成这项工作。

Linux sed命令教程:该文件中的单词 DATA 是真实内容的占位符,我们将存储在另一个名为 data 的文件中。

我们将用实际内容替换它:

$ Sed '/DATA>/ {

r newfile

d}' myfile
31+个Linux sed命令在文本操作中的用法示例

惊人的!!如你所见,我们用另一个文件中的数据填充了占位符位置。

Linux sed命令文本操作:这只是关于 sed 命令的一个小介绍。sed Linux 命令本身就是另一个世界。

唯一的限制是你的想象力。

我希望你发现使用 sed Linux 命令操作字符串很容易,希望以上的Linux sed命令用法示例可以帮助到你,若有任何问题,请在下方评论。

谢谢阅读。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: