Sed,在模式匹配后插入一行,并忽略任何带有#的注释行

时间:2017-08-07 15:59:09

标签: linux bash shell sed

我想在模式匹配后插入一行,并使用sed忽略Bash shell中的任何注释行(以'#'开头)。

以下是一个示例:在pattern之后插入新行:

输入文件:

foo
Art 
street 
#pattern
foo
pattern
color

输出

foo
Art 
street 
#pattern
foo
pattern
NEW LINE HERE
color

4 个答案:

答案 0 :(得分:2)

使用sed

$ cat file
foo
Art
street
#pattern
foo
pattern
color

$ sed '/^[^#]*pattern/ a NEW LINE HERE' file
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color

答案 1 :(得分:1)

尝试一次。

.apply(str)

答案 2 :(得分:1)

sed的另一种方法:

sed 's/^pattern.*/&\nNEW LINE HERE/' file

将以pattern开头的行替换为匹配的行(&),后跟新行(\n)和所需的字符串。

答案 3 :(得分:0)

使用awk

awk -v line='NEW LINE HERE' -v pat='pattern' '1; $0 ~ pat && !/^[ \t]*#/{print line}' file

foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color