Linux Sed,在模式匹配后插入一行,并忽略任何注释行分层#
我想在模式匹配后插入一行,并使用Linux Sed,在模式匹配后插入一行,并忽略任何注释行分层#,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我想在模式匹配后插入一行,并使用sed忽略bashshell中的任何注释行(以“#”开头) 下面是一个示例:在模式后插入新行: 输入文件: foo Art street #pattern foo pattern color 输出: foo Art street #pattern foo pattern NEW LINE HERE color 使用sed: $ cat file foo Art street #pattern foo pattern color $ sed '/^[^
sed
忽略bashshell中的任何注释行(以“#”开头)
下面是一个示例:在模式
后插入新行:
输入文件:
foo
Art
street
#pattern
foo
pattern
color
输出:
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color
使用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
也试着跟随一次
awk '/pattern/ && !/#/{print $0 ORS "NEW LINE HERE";next} 1' Input_file
sed的另一种方法:
sed 's/^pattern.*/&\nNEW LINE HERE/' file
将以
模式开始的行
替换为匹配行(&
),后跟新行(\n
)和所需字符串。您也可以使用n
跳过
行:'/^/n/模式/a…
如果您有许多正则表达式都需要跳过注释行,这将非常有用。用n
跳过注释,然后剩下的正则表达式就不必担心注释了。这将是一个聪明的改进。谢谢你的反馈!非常简单明了的++。我认为,唯一的缺点是,只有当模式处于行的开头时,这才有效。是吗?你说得对。锚可以替换为您的模式^[^#]*
。