如果给定的模式在该行匹配,如何在每行的开头插入文本

时间:2014-09-06 07:13:45

标签: shell awk sed grep

只有当给定的模式与该行匹配时,我才需要在每一行插入文本。

例如,

      sed -n '/pattern/p' /etc/inittab/

所以,如果模式与inittab文件中的任何行匹配,那么我需要插入'#'在同一文件本身的那些行的开头。

请建议我,如何做到这一点。

2 个答案:

答案 0 :(得分:3)

使用sed

sed '/pattern/s/^/#/' file

这将查找与模式匹配的行,一旦找到它,它将#放在它前面。这不会修改文件。为此,您需要使用-i选项进行就地更改。如果您愿意,可以将-i.bak这样的扩展名设为可选项。

使用awk

awk '/pattern/{$0="#"$0}1' file

awk由模式操作语句组成。对于匹配模式,我们所做的操作是通过在其前面放置#来修改该行。最后的1将为我们打印行。 GNU awk v4.1或更高版本就像sed一样进行了就地编辑。如果您使用的是旧版本,则可以将输出重定向到另一个文件,然后将mv恢复为原始文件:

awk '/pattern/{$0="#"$0}1' file > tmp && mv tmp file

就地改变并不特别。它的作用与重定向到临时文件然后再移回它相同。它只是在幕后为你做了所有肮脏的工作。

答案 1 :(得分:1)

这是通过以下sed调用

实现的
% sed -i.orig -e '/pattern/s/^/#/' inittab

-i.orig选项告诉sed在文件上就地操作,之前将原始文件保存为inittab.orig。编辑模式

/pattern/    selects lines matching pattern
s/^/#/       and substitute the empty word at the beginning of line with #