Regex “如何替换”;XXX“|{quot;Foo";,“Bar";}to";YYY";|{quot;Foo";}在目录中的所有文件中递归?

Regex “如何替换”;XXX“|{quot;Foo";,“Bar";}to";YYY";|{quot;Foo";}在目录中的所有文件中递归?,regex,sed,grep,substitution,Regex,Sed,Grep,Substitution,如何将目录中所有文件中的“XXX”{“Foo”,“Bar”}替换为“YYY”{“Foo”} 我想使用sed,但是这里的特殊字符很棘手。使用find和xargs的单向方法: find . -type f -print0 | xargs -0 sed -i -r 's/"XXX" \| \{"Foo", "Bar"\}/"YYY" \| \{"Foo"\}/g' 使用perl: > find . -type f|xargs perl -p -e 's/"XXX" \| {"Foo", "Ba

如何将目录中所有文件中的
“XXX”{“Foo”,“Bar”}
替换为
“YYY”{“Foo”}


我想使用
sed
,但是这里的特殊字符很棘手。

使用
find
xargs的单向方法:

find . -type f -print0 | xargs -0 sed -i -r 's/"XXX" \| \{"Foo", "Bar"\}/"YYY" \| \{"Foo"\}/g'
使用perl:

> find . -type f|xargs perl -p -e 's/"XXX" \| {"Foo", "Bar"}/"YYY" \| {"Foo"}/g
这可能适用于您(GNU-sed):


我认为find不是一个很好的解决方案,因为不包含字符串的文件将被传递给sed进行处理。@user001:如果不检查,您如何知道?@user001:如果您知道一些不希望检查的文本文件,请使用:
-not-name“*.txt”
find . -type f -print0 | 
xargs -0 sed -i '/"XXX"\s*|\s*{\s*\("[^"]*"\)\s*,\s*"[^"]*"\s*}/s//"YYY" | {\1}/g'