Sed命令:如果存在,如何替换只是插入?

use*_*709 17 linux sed

我需要在文件中编辑几行,这样如果一行以(av或avpgw)开头,则用新文本替换它们,否则只需在开头插入新文本.

我怎么能用sed做到这一点?

Ola*_*che 14

你可以这样做:

sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file
Run Code Online (Sandbox Code Playgroud)

这将用new text(s ///)替换模式并跳转到结尾(t).否则它会尝试下一个模式.另请参见sed命令摘要.

您还可以使用以下命令分隔命令;:

sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file
Run Code Online (Sandbox Code Playgroud)

或者将命令放在sed命令文件中:

s/^avpgw/new text/
t
s/^av/new text/
t
s/^/new text/
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

sed -f commandfile file
Run Code Online (Sandbox Code Playgroud)

如果要忽略大小写,请在替换命令的末尾附加i,如下所示s/^av/new text/i.另一种方法是用字符集拼出它s/^[aA][vV]/new text/.但这并不sed具体,为此你可以搜索正则表达式.