15个有用的“sed”命令提示和技巧的日常Linux系统管理任务

在本文中,我们将回顾sed,众所周知的流编辑器,并共享15个提示使用它,以实现前面提到的目标,等等。

每个系统管理员都必须每天处理纯文本文件。了解如何查看某些部分,如何替换字词,以及如何从这些文件中过滤内容是您需要方便的,无需进行Google搜索的技能。
Linux Sed命令示例

15有用的“sed”命令提示和技巧Linux

在本文中,我们将回顾sed,众所周知的流编辑器,并共享15个提示使用它,以实现前面提到的目标,等等。

1.查看文档的行范围

工具,例如头部和尾部允许我们查看底部或文件的顶部。 如果我们需要在中间查看一个部分怎么办? 下面的sed单行将myfile.txt的回油管5〜10:
# sed -n '5,10p' myfile.txt

2.查看整个文件,除了给定的范围

另一方面,可能要打印整个文件,除了某个范围。要排除线2035myfile.txt的 ,这样做:
# sed '20,35d' myfile.txt

3.查看非连续的线和范围

有可能你对一组非连续线或一个以上的范围感兴趣。让我们显示的行从myfile.txt的 5-710-13:
# sed -n -e '5,7p' -e '10,13p' myfile.txt
正如你所看到的, -e选项允许我们为每个范围内执行给定的动作(在这种情况下,打印线)。

4.替换字或字符(基本替换)

要替换的单词每个实例versionstorymyfile.txt中 ,这样做:
# sed 's/version/story/g' myfile.txt
此外,您可能要考虑使用gi ,而不是g以忽略字符大小写:
# sed 's/version/story/gi' myfile.txt
为了用一个空格代替多个空格,我们将使用的输出ip route show和管道:
# ip route show | sed 's/  */ /g'
输出比较ip route show有和无管道:
替换文件中的字或字符

替换文件中的字或字符

5.替换范围内的字或字符

如果你感兴趣的只是一条线范围内更换的话(3040,例如),你可以这样做:
# sed '30,40 s/version/story/g' myfile.txt
当然,你可以通过其相应的数字而不是一个范围来表示一行。

6.使用正则表达式(高级替换) - I

有时配置文件加载注释。虽然这当然有用,但是如果想要一目了然地查看所有配置指令,那么有时候只显示配置指令可能会有所帮助。 要删除空行或有开始#从Apache配置文件,这样做:
# sed '/^#\|^$\| *#/d' httpd.conf
插入符号符号后面跟数字符号(^#)表示一行的开始,而^$表示空白行。垂直条表示布尔运算,而反斜杠用于转义垂直条。 在这种特殊情况下,Apache配置文件与行#'s不是一些行的开始,所以*#用来消除那些为好。

7.使用正则表达式(高级替换) - II

要用大写或小写字母替换另一个单词,我们还可以使用sed。为了说明这一点,让我们来替换词ZIP或在myfile.txt的 RAR 邮编
# sed 's/[Zz]ip/rar/g' myfile.txt

不要错过: 用awk与正则表达式中的文件筛选文本

8.查看包含给定模式的线

SED的另一个用途在于打印从匹配给定正则表达式的一个文件中的行。 在CentOS 7服务器例如,我们可能有兴趣在观看了发生在7月2日 ,根据在/ var授权和认证活动/日志/安全日志。 在这种情况下,要搜索的图案是7月2日在每一行的开头:
# sed -n '/^Jul  1/ p' /var/log/secure
查看特定日期的日志(行)

查看特定日期的日志(行)

9.在文件中插入空格

使用sed,我们还可以插入文件中的每一个非空行空间(空行)。 要插入一个空行牌照每隔一行,一个纯文本文件,这样做:
# sed G myfile.txt
要插入两个空白行,请执行以下操作:
# sed 'G;G' myfile.txt
添加如果你想添加更多的空行用分号隔开一个大写-G。下图说明了本提示中概述的示例:
在文件中插入空格

在文件中插入空格

如果你想检查一个大的配置文件,这个提示可能会派上用场。每隔一行插入一个空格,并将输出以较小的比例输出,将产生更友好的阅读体验。

10.使用内联编辑模拟dos2unix

DOS2UNIX的程序从Windows / Mac格式化的Unix / Linux转换纯文本文件,删除在这些平台上使用一些文本编辑器插入隐藏换行符。 如果没有安装在你的Linux系统,你可以用sed的 ,而不是安装它模仿其功能。 在左侧图片,我们可以看到几个DOS换行符(^M)这后来被移除:
# sed -i 's/\r//' myfile.txt
将文本文件从Windows隐藏到Linux

将文本文件从Windows隐藏到Linux

请注意, -i选项指示就地编辑。然后更改将不会返回到屏幕,但会保存到文件。 注意 :您可以将DOS换行符,而编辑vim编辑器文件Ctrl+VCtrl+M

11.原位编辑和备份原始文件

在前面的文章中,我们使用sed来修改一个文件,但没有保存原始文件。有时,最好保存原始文件的备份副本以防万一。 要做到这一点,表明继Postfix-i选项(单引号内)将用于重命名原始文件。 在下面的例子中,我们将取代这个 (不区分大小写)与所有实例myfile.txt中 ,我们将保存原始文件myfile.txt.orig。 最后,我们将使用diff工具 ,以确定这两个文件之间的差异:
# sed -i'.orig' 's/this/that/gi' myfile.txt
使用sed编辑和备份原始文件

使用sed编辑和备份原始文件

12.切换词对

让我们假设你有一个包含格式名字全名, 文件。 为了充分处理文件,你可能想切换 。 我们可以做到这一点与SED很容易:
# sed 's/^\(.*\),\(.*\)$/\2\, \1/g' names.txt
在文件中切换字

在文件中切换字

在上面的图片我们可以看到,括号,作为特殊字符,需要转义,因为这样做数字12。 这些数字表示突出显示的正则表达式(需要显示在括号内):
  1. 1表示直到逗号的每行的开始。
  2. 2是一个占位符,用于在逗号右边到行尾的所有内容。
所需的输出格式SecondColumn( )+ 逗号 + 空格 + FirstColumn( )表示。随意改变它到任何你想要的。

13.仅当找到单独的匹配项时才更换字词

有时替换给定单词的所有实例,或者随机几个,不是我们需要的。也许我们需要执行替换,如果发现单独的匹配。 例如,我们可能想停下来代替开始只有文字服务,是在同一行中。在这种情况下,会发生什么:
We need to start partying at work,
but let’s remember to start all services first.
在第一行中, 开始将不会与止动取代因为字服务不会在该行的出现,而不是在第二行。
# sed '/services/ s/start/stop/g' msg.txt
替换文件中的单词

替换文件中的单词

14.一次进行两个或多个取代

您可以将两个或多个替换一个单一的sed命令。 让我们来分别替换myfile.txt中的单词,并符合本和诗句。 注意,如何这可以通过使用普通的SED替换命令后跟一个分号和第二替换命令来完成:
# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt
此提示如下图所示:
替换文件中的多个字

替换文件中的多个字

15.结合sed和其他命令

当然,sed中可以与其它工具相结合,以创建更强大命令。 例如,让我们使用技巧#4中给出的例子,从输出提取我们的IP地址, ip route命令。 我们将只打印该单词的行开始src是。 然后我们将多个空格转换为一个单一的。 最后,我们将削减9场(考虑单个空格作为字段分隔符),这是在IP地址为:
# ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9
下图说明了上述命令的每一步:
结合sed与其他命令

结合sed与其他命令

概要

在本指南中,我们有共同的15 SED提示和技巧 ,以帮助您与您的日常系统管理任务。有没有任何其他提示,你定期使用,并希望与我们和社区的其他人分享? 如果是这样,请随时使用下面的评论表格让我们知道。问题和意见也欢迎 - 我们期待您的回音!

不要错过: 掌握Linux的awk的“命令与技巧和窍门