2011-10-10 176 views
0

的比賽我有下面的語句在他們的方法的各種java文件:使用SED替換字符串

 var1.setMaximumSize((-1)); 

聲明與6個空格開始。

我想刪除這些行或用空字符串替換它們。我曾嘗試下面的腳本,但沒有成功:

for fl in *.java; do 
    mv $fl $fl.old 
    sed 's/^\s*var[0-9]+\.setMaximumSize\(\(-1\)\);$//g' $fl.old > $fl 
    rm -f $fl.old 
done 
+0

有人可以告訴我應該如何使它導航目錄樹? –

+0

沒關係,我設法做到了。 –

回答

1

很多SED的實現不接受現代的正則表達式模式。你的表情中可能存在問題的是\ s和+。 (Try \ +)。此外,sed的治療(作爲普通字符必須逃脫成爲元字符,您可以嘗試:

 
$ sed '/^  var[0-9][0-9]*.setMaximumSize((-1));$/d' 
+0

這是我的實現中的一個問題,非常感謝幫助。 –

2

我認爲,這是行不通的,因爲你正在使用正則表達式擴展(例如在+量詞),所以你必須使用sed -r

您也可以執行就地編輯,從man sed

-i[SUFFIX], --in-place[=SUFFIX] 

      edit files in place (makes backup if extension supplied) 

所以這應該工作:

sed -r -i'' -e's/^\s*var[0-9]+\.setMaximumSize\(\(-1\)\);$//g' *.java 
1

如果您的sed實現支持-i(就地)選項:

sed -i '/^ \{6\}var[0-9][0-9]*.setMaximumSize((-1));$/d' *java 
1

如果你想使用文字括號,你不需要逃避它sed解釋轉義的括號作爲分組此外,還需要躲避的「+」正確使用:。

sed 's/^\s*var[0-9]\+\.setMaximumSize((-1));$//g' $fl.old > $fl