linux - Sed 命令 : how to replace if exists else just insert?

标签 linux 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/

相关文章:

c++ - 此文件需要 C++11 库支持

php - 如何防止Linux中的文件被更改

regex - 将数字顺序添加到匹配的事件中

linux - sed 提取数字组

regex - 使用sed,正则表达式如何匹配汉字?

linux - Bash 重新着色目录中的所有 svg 文件

linux - 使用 ls -1 列出包含特定字符串并忽略特定字符串的文件

sed - 如何使用 sed 删除文件中的所有双引号

regex - 在 sed 中插入换行符 (Mac OS X)

bash - 使用shell修改文件夹及其所有子文件夹中的文件