我希望通过一个文件夹进行递归,并用{{text in here}}
%{text in here}
的所有出现
我检查了其他grep + sed主题,但它们通常与标准字符串替换有关;我想保持字符串不变,但是替换一些字符围绕字符串(基本上用%
替换第一个左括号并删除第二个右括号。)
答案 0 :(得分:1)
除非由于某种原因必须使用sed
,否则Perl几乎总是更受欢迎,因为它更清晰,功能更强大的正则表达式语法:
find ... | xargs perl -i~ -pe 's/{{(.*?)}}/%{$1}/g'
此外,尽管-i~
创建了备份,但我强烈建议您在玩这个之前备份整个树。我无法通过两次运行破坏的命令行来计算我擦除工作的次数。最常见的错误是意外使用-ne
而不是-pe
,这导致所有数据都从原件中删除。再次运行它会用新清空的文件替换备份,只留下你肚子里的下沉感。
答案 1 :(得分:1)
尝试像s/{{\(.*\)}}/%{\1}/
\ 1被第一个(...)对的内容替换
答案 2 :(得分:0)
这会有用吗?
sed 's/{{/%{/g;s/}}/}/g' inputfile
或
sed 's/{{\([^}]*\)}}/%{\1}/g' inputfile
答案 3 :(得分:0)
使用临时字符允许排除([^³]
)。这假设里面没有³
和²
。几乎任何其他字符都可以通过首次检查/替换来使用或保护,但通常不需要标准内容。
sed -e 's/{{/²/g;s/}}/³/g;s/²\([^³]*\)³/%{\1}/g;s/²/{{/g;s/³/}}/g' YourFile
在KSH / posix sed上
echo "{{abc}} def {{ghi}} jkl {{ mno } {{pqr}}" | sed -e 's/{{/²/g;s/}}/³/g;s/²\([^³]*\)³/%{\1}/g;s/²/{{/g;s/³/}}/g'
%{abc} def %{ghi} jkl %{ mno } {{pqr}
请注意{{ mno } {{pqr}}