Linux生产环境中最常用的一套“sed命令”技巧
sed命令用途广泛且易于使用,是快速文本处理的强大工具。事实上,它并没有太多的技能。记忆和运用是最适合的学习渠道,也是一项有难度的技能。但它很复杂,因为有很多高级功能。本文不重点介绍sed的高级功能,仅讲解一些常用操作。
当你使用它的时候,你会发现它符合一些概念vim。正则表达式的语法基本相同,没有太多的学习开销。从个人视野和工作效率来看,sed命令是程序员需要掌握的重要工具。
那些说现场能用Google的人,大多习惯把文字复制到Excel中,慢慢搞,遇到大量文件就更糊涂了。这并不意味着一个家庭不进入另一个家庭。这篇文章不是为你写的。
简单介绍
如图所示,一个简单的sed命令包含三个主要部分:参数、区域❀。将要操作的文件直接挂在命令行末尾即可。除了命令行之外,sed 还可以通过 -f 参数指定 sed 脚本。这是高级用法,不再过多描述。
我将多次重复一些示例命令。如果你聪明的话,你一定会发现其中的规律,有时甚至不需要解释。
参数
-n 该参数表示 还有一个我们常用的参数: 使用此参数后,所有更改都将在原始文件上进行。您的输出将覆盖原始文件。 非常危险,小心。 1,4表示查找文件中第1、2、3、4行的内容。 这个系列的命名很有灵性,请看下面的例子(请自行替换图中的范围)。 5 选择第 5 行。 范围选择也可以使用正则匹配。请参阅下面的示例。 /sys/,+3 选择单词 sys 出现的行以及以下三行。 为了直观起见,以下命令与上面的介绍一一对应。触及范围和操作之间可能存在差距。 最常用的操作是 除了打印之外,还有下面我们常用的操作。 p 打印匹配的内容。 上面是 替换模式参数较多,但第一部分和第五部分可以省略。替换后,将打印整个文本。 前半部分用于匹配某些范围,后半部分执行替换操作。 此范围对应于上面的范围语法。请参阅下面的示例。 /sys/,+3 选择单词 sys 出现的行以及以下三行。 具体命令是: 这里的命令指的是s,就是替换的意思。 搜索部分查找要替换的字符串。这部分可以接受纯字符串或正则表达式。请参阅下面的示例。 a 在范围数组中查找字符串 如下所示: 是时候替换找到的字符串了。此部分的内容替换“查找匹配项”部分的内容。 不幸的是,这部分不能使用正则表达式。最常用的是精确替换。更换例如a 和 b. 但也有高级功能。与Java或Python中常见的API类似,sed的替换也有 [&]表示查找到的数据被[]包围。 以下命令用引号将文件中的每一行引起来。 这些参数可以单独使用,也可以多个使用。只介绍最常用的。 g 默认情况下,仅匹配该行中第一次出现的内容。添加 g 以替换整个文本。经常使用。 看一下两个命令的语法: 由于规律性,很多字符必须转义。你会在脚本中做很多 例如下面五个命令是一样的吗? 注意:该方法不适用于前半部分区域。我习惯使用符号 如您所见,正则表达式在命令行中无处不在。下面是一个简单的解释。 ^ 线路起点 + | or, or \b 匹配一个单词。例如, 上面简单介绍了参数i。它的作用是允许对原始文件进行操作。无论您做什么,原始文件都会被覆盖。这是非常危险的。 通过添加参数即可备份原文件。 以上命令会对原file文件生效,生成file.bak文件。强烈建议使用 i 参数来指定 bak 文件。 让我们用两个命令来看看 sed 与其他命令结合的威力。 输出长度不少于50个字符的行 统计每个单词在文件中出现的次数 找到文件夹中的py文件,删除所有行级注释 参见第5页-7行和第10-13行 只输出ip地址--安静或--silent♶。指定忽略执行过程的输出,只输出我们的结果。 -i。 范围
2.5 选择第 2 至第 5 行,共 4 行。
1~2 选择奇数行。
2~2 选择偶数行。
2、+3 和 2.5 效果相同,共 4 行。
2,$ 从第二行到文件末尾。
/\^sys/,/mem/ 选择以 sys 开头的行和带有单词 mem 的行之间的数据。 sed -n '5p' file
sed -n '2,5 p' file
sed -n '1~2 p' file
sed -n '2~2 p' file
sed -n '2,+3p' file
sed -n '2,$ p' file
sed -n '/sys/,+3 p' file
sed -n '/^sys/,/mem/p' file操作
p,即打印的意思。比如下面两条命令是等价的: cat file
sed -n 'p' file
d 删除匹配的内容。此时,必须删除参数-n。想想为什么。
w 在其他地方写下匹配的内容。 a、i、c等操作都是基础但很少用到的,就不介绍了。我们还是用一些命令来说明。 sed -n '2,5 p' file
sed '2,5 d' file
sed -n '2,5 w output.txt' file替换模式
sed命令的正则匹配模式,但它还有一个强大的替换模式,即查找并替换其中的某些值并输出结果。使用替换模式很少使用参数-n。 ![]()
范围
/\^sys/,/mem/ 选择以 sys 开头的行和带有单词 mem 的行之间的数据。 sed '/sys/,+3 s/a/b/g' file
sed '/^sys/,/mem/s/a/b/g' file命令
查找匹配项
a。
[a,b,c] 从范围 range 中搜索字符串 a 或 b 或 c。命令 sed 's/a/b/g' file
sed 's/[a,b,c]/<&>/g' file
#这个命令我们下面解释 替换
Matched Pattern的含义,Group也可以不加赘述地获取。常用的替换符号是&。 &,重复一遍。当用于替换字符串时,它表示原始搜索匹配数据。
“&” 表示要查找的数据被“”包围。 sed 's/.*/"&"/' file标志参数
p 当使用-n参数时,p将仅输出匹配行。
w 与上面的 w 模式类似,但它只输出变换后的行。
i 这个参数比较重要,表示忽略大小写字母。
e 表示对于每个输出行执行一个命令。不建议使用,可以使用xargs来完成这个功能。 sed -n 's/a/b/gipw output.txt' file
sed 's/^/ls -la/e' fileFunny
\\、\*等处理。您可以使用四个字符 |^@! 来替换 \。 sed '/aaa/s/\/etc/\/usr/g' file
sed '/aaa/s@/etc@/usr@g' file
sed '/aaa/s^/etc^/usr^g' file
sed '/aaa/s|/etc|/usr|g' file
sed '/aaa/s!/etc!/usr!g' file@。 其他
正则表达式
$ 线路终点
❀❀❓ * 0 或更多匹配![]()
1 场或以上比赛 ? ♿m♿ 0 或 1 场比赛 ♿m♿ 重复上一场比赛 m 次
{m,n}前一个匹配重复 m 到 n 次
\ 转义字符 ❓♿❝ 匹配括号 对于 中的任何字符, or 的函数是 \bluky\b只匹配单词lucky参数i
sed -i.bak 's/a/b/' file让我们展示一下
sed -n '/^.{50}/p'sed 's/ /\n/g' file | sort | uniq -cfind ./ -name "*.py" | xargs sed -i.bak '/^[ ]*#/d'sed -n -e '5,7p' -e '10,13p' fileip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9
作者:小姐姐味道
来源:知乎
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网