Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Sed,在模式匹配后插入一行,并忽略任何注释行分层#_Linux_Bash_Shell_Sed - Fatal编程技术网

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
跳过注释,然后剩下的正则表达式就不必担心注释了。这将是一个聪明的改进。谢谢你的反馈!非常简单明了的++。我认为,唯一的缺点是,只有当模式处于行的开头时,这才有效。是吗?你说得对。锚可以替换为您的模式
^[^#]*