2014-10-18 58 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