只有当给定的模式与该行匹配时,我才需要在每一行插入文本。
例如,
sed -n '/pattern/p' /etc/inittab/
所以,如果模式与inittab文件中的任何行匹配,那么我需要插入'#'在同一文件本身的那些行的开头。
请建议我,如何做到这一点。
答案 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 #