2011-10-10 270 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