【发布时间】:2019-02-03 14:08:59
【问题描述】:
是否可以在文件中查找和替换一行,或者如果不存在则将字符串附加到末尾?
我知道我可以用它来查找和替换:
sed -i -e "s/^SEARCH/LINE 1\nLINE 2/" file
我知道我可以像这样追加到文件中:
cat << EOF | tee -i file1 file2
LINE 1
LINE 2
EOF
是否有可能以某种方式将其结合起来。因此,如果/^SEARCH.*$/ 匹配,则替换它,如果不匹配,则将替换附加到文件末尾。
使用更好的输入/输出示例更新:
例如,如果我有这个输入文件testfile:
Alpha
Bravo
Charlie
假设我想查找Bravo 并将其替换为Bravo=bingo,或如果Bravo 不存在,则添加Bravo=bingo,预期输出为:
Alpha
Bravo=bingo
Charlie
这是因为Bravo存在于文件中,所以被替换了。
假设我想查找Delta 并将其替换为Delta=bingo,或如果Delta 不存在,则添加Delta=bingo,预期输出为:
Alpha
Bravo
Charlie
Delta=bingo
这是因为Delta 不在文件中,所以它被附加了。
【问题讨论】:
-
我没有卡在
sed上。 SO/SE 不是关于做某事的最佳 方式吗?您展示的方式有效,并且对于插入多行内容特别有用,但是如果您不需要插入多行,您是说它是 最好的 方式吗?如果你是,那我就退出。我想重新打开问题的原因是,当您不需要插入多行内容时,看看是否有更好的方法。 -
是的,这正是我要说的,因为它清晰、简单、便携、高效、健壮且易于增强。顺便说一句,我知道 SO/SE 是什么意思,并且无法通过谷歌搜索找到它的定义。
-
您的说明文本与您的示例输出不匹配。您说您想替换
^SEARCH=.*$但这与您的“Bravo”示例不符。你说你想附加Delta=bingo,但你实际上附加了Delta。 -
@jhnc 哎呀。对不起,错别字。我修好了。