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

Regex sed:如何在将选定文本保留在选定文本选择中的同时替换文本?,regex,bash,sed,Regex,Bash,Sed,使用sed,我将如何浏览文件并替换以下内容: alphabet.abc = "123"; 与 我目前拥有的是: for i in $(ls -a); do sed -i 's/asd/dfg/g' $i; done; 但它不能在保留选定内容的同时替换选定内容。要将文本部分保留在选定或匹配的字符串中,您需要使用。正如@anubhava在其评论中所说 例如: $ echo 'alphabet.abc = "123";' | sed 's/\(alphabet\.\)\([a-z]\+\) *=

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

alphabet.abc = "123";

我目前拥有的是:

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

但它不能在保留选定内容的同时替换选定内容。

要将文本部分保留在选定或匹配的字符串中,您需要使用。正如@anubhava在其评论中所说

例如:

$ 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' {} \;

你想把点后面的字母从小写改为大写吗?从某物到任何东西,从
abc=“123”的转换至<代码>ABC(“123”)是重要的部分。你添加的答案为我解决了这一问题,并提供了许多替代可能性,所以这很好。在将其标记为正确之前,我只需等待一秒钟,以确保没有遗漏任何内容。请避免解析来自
ls
的输出。以
为i in*运行您的循环;做完成
您将如何递归地执行*
中的i?
$ echo 'alphabet.abc = "123";' | sed 's/\(alphabet\.\)\([a-z]\+\) *= *\([^;]*\);/\1\U\2(\3);/g'
alphabet.ABC("123");
find . -type f -execdir sed -i 's/\(alphabet\.\)\([a-z]\+\) *= *\([^;]*\);/\1\U\2(\3);/g' {} \;