<分区>
我需要在一个文件中编辑几行,这样 如果一行以 (av 或 avpgw) 开头,则将其替换为新文本, 否则只需在开头插入新文本。
我如何使用 sed 执行此操作?
<分区>
我需要在一个文件中编辑几行,这样 如果一行以 (av 或 avpgw) 开头,则将其替换为新文本, 否则只需在开头插入新文本。
我如何使用 sed 执行此操作?
最佳答案
你可以这样做:
sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file
这会用 新文本
(s///) 替换模式并跳转到结尾 (t)。否则它会尝试下一个模式。另见 sed commands summary .
你也可以用;
分隔命令:
sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file
或者将命令放在 sed 命令文件中:
s/^avpgw/new text/
t
s/^av/new text/
t
s/^/new text/
并这样调用它:
sed -f commandfile file
如果您想忽略大小写,请在替换命令的末尾附加一个 i,如 s/^av/new text/i
所示。另一种方式是用字符集s/^[aA][vV]/new text/
来拼写。但这不是 sed
特定的,为此您可以搜索一般的正则表达式。
关于linux - Sed 命令 : how to replace if exists else just insert?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014055/