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/
我尝试 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/