sed:如何在选定的文本选择中保留所选文本的同时替换文本?

时间:2014-10-18 06:18:37

标签: regex bash sed

使用sed,我将如何浏览文件并替换以下内容:

alphabet.abc = "123";

alphabet.ABC("123");

我现在拥有的是:

for i in $(ls -a); do sed -i 's/asd/dfg/g' $i; done;

但它不能在选择内部保留某些内容时替换选择。

1 个答案:

答案 0 :(得分:1)

要将文本的一部分保留在选定或匹配的字符串中,您需要使用capturing groups。AS @anubhava在评论you don't need to parse the output of ls command中说。

for i in *; do sed -i 's/\(alphabet\.\)\([a-z]\+\) *= *\([^;]*\);/\1\U\2(\3);/g' $i; done;

示例:

$ echo 'alphabet.abc = "123";' | sed 's/\(alphabet\.\)\([a-z]\+\) *= *\([^;]*\);/\1\U\2(\3);/g'
alphabet.ABC("123");

通过GNU find命令:

您可以在要使用的文件所在的目录上运行以下命令。

find . -type f -execdir sed -i 's/\(alphabet\.\)\([a-z]\+\) *= *\([^;]*\);/\1\U\2(\3);/g' {} \;