15有用的“sed”命令提示和技巧Linux
1.查看文档的行范围
工具,例如 头部和尾部允许我们查看底部或文件的顶部。 如果我们需要在中间查看一个部分怎么办? 下面的sed单行将 myfile.txt的回油管 5〜10:# sed -n '5,10p' myfile.txt
2.查看整个文件,除了给定的范围
另一方面,可能要打印整个文件,除了某个范围。要排除线 20至 35从 myfile.txt的 ,这样做:# sed '20,35d' myfile.txt
3.查看非连续的线和范围
有可能你对一组非连续线或一个以上的范围感兴趣。让我们显示的行从 myfile.txt的 5-7和 10-13:# sed -n -e '5,7p' -e '10,13p' myfile.txt正如你所看到的,
-e
选项允许我们为每个范围内执行给定的动作(在这种情况下,打印线)。
4.替换字或字符(基本替换)
要替换的单词每个实例version
与
story
中
myfile.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.替换范围内的字或字符
如果你感兴趣的只是一条线范围内更换的话 (30至 40,例如),你可以这样做:# 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
-i
选项指示就地编辑。然后更改将不会返回到屏幕,但会保存到文件。
注意 :您可以将DOS换行符,而
编辑vim编辑器文件与
Ctrl+V
和
Ctrl+M
。
11.原位编辑和备份原始文件
在前面的文章中,我们使用 sed来修改一个文件,但没有保存原始文件。有时,最好保存原始文件的备份副本以防万一。 要做到这一点,表明继Postfix-i
选项(单引号内)将用于重命名原始文件。 在下面的例子中,我们将取代
这个或
这 (不区分大小写)与所有实例
myfile.txt中 ,我们将保存原始文件
myfile.txt.orig。 最后,我们将使用
diff工具 ,以确定这两个文件之间的差异:
# sed -i'.orig' 's/this/that/gi' myfile.txt
使用sed编辑和备份原始文件
12.切换词对
让我们假设你有一个包含格式 名字全名, 姓文件。 为了充分处理文件,你可能想切换 姓和 名 。 我们可以做到这一点与 SED很容易:# sed 's/^\(.*\),\(.*\)$/\2\, \1/g' names.txt
在文件中切换字
- 1表示直到逗号的每行的开始。
- 2是一个占位符,用于在逗号右边到行尾的所有内容。
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与其他命令
概要
在本指南中,我们有共同的 15 SED提示和技巧 ,以帮助您与您的日常系统管理任务。有没有任何其他提示,你定期使用,并希望与我们和社区的其他人分享? 如果是这样,请随时使用下面的评论表格让我们知道。问题和意见也欢迎 - 我们期待您的回音!不要错过: