我有各种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
答案 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