2014-10-18 30 views
0

随着SED,我怎么会通过文件(县)旅游和替换是这样的:sed:如何在选定的文本选择内保留选定文本的同时替换文本?

alphabet.abc = "123"; 

alphabet.ABC("123"); 

我现在有是这样的:

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

但在保留选择内容的同时不能取代选择。

+0

您是否正在尝试将小写字母从小写字母改为大写字母? – 2014-10-18 06:31:04

+0

从某物到任何东西,从abc =“123”;到ABC(“123”)的转换是重要的部分。你添加的答案为我解决了这个问题,并提供了很多替代的可能性,所以它很好。我只需等待一秒钟,然后将其标记为正确,以确保我没有错过任何东西。 – JVE999 2014-10-18 06:41:41

回答

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

避免解析'ls'的输出。运行你的循环为'为我in *;做...完成' – anubhava 2014-10-18 07:26:38

+0

你将如何为'我在*'递归? – JVE999 2014-10-19 03:02:13

+0

@ JVE999但find命令将工作.. – 2014-10-19 03:17:18