使用sed替换字符串的匹配项

时间:2011-10-10 12:44:43

标签: bash sed

我有各种java文件,它们的方法中包含以下语句:

      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

4 个答案:

答案 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 :(得分:1)

sed的许多实现都不接受现代正则表达式模式。表达式中可能存在问题的是\ s和+。 (试试\ +)。此外,sed对待(作为一个必须被转义成为元字符的普通字符。你可以尝试:

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

答案 2 :(得分:1)

如果 sed 实现支持-i(就地)选项:

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

答案 3 :(得分:1)

如果要使用文字括号,则无需转义它。 sed将转义的括号解释为分组。此外,您需要转义'+'才能正确使用它:

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