sed - 类似字符串模式的条件替换

sed - conditional replacement of similar string patterns

我尝试 replace/append 文本文件中的字符串 sed。 在允许替换之前需要匹配另一个字符串(“绿色”)。

字符串非常相似:

apple >> apple_tree
apple X1 >> apple_tree
appleX1 >> apple_tree

如果不考虑条件并且应替换其中一个字符串的第一次出现,则此代码有效:

find . -type f -exec sed -i '0,/apple|apple X1|appleX1/{s/apple|apple X1|appleX1/apple_tree/}' {} +

此代码无法执行(提示正在等待)

find . -type f -exec sed -i '/green/,// /apple|apple A0|appleA0/{s/apple|apple A0|appleA0/apple_tree/}' {} +

虽然这个没有其他模式也能工作:

find . -type f -exec sed -i '/green/,// s/apple/apple_tree/' {} +

不幸的是,使用像 \ 这样的文字边框指示符也不起作用。

OS 是 Ubuntu 20.04。解决方案不限于sed.

谢谢。

编辑:

输入:

orange
pear
kiwi
apple X1
mango
banana
apple

green

orange
pear
kiwi
apple X1
mango
appleX1
banana
apple
Code execution

期望的输出:

orange
pear
kiwi
apple X1
mango
banana
apple

green

orange
pear
kiwi
apple_tree
mango
apple_tree
banana
apple_tree

您似乎想要:

sed -i -e '/green/,$s/apple\( A0\|A0\|\)/apple_tree/'

查看https://www.gnu.org/software/sed/manual/sed.html https://www.grymoire.com/Unix/Sed.html https://regexcrossword.com/