如何在Java文件中某个模式的一行之前和之后注释掉?

时间:2017-06-30 15:52:07

标签: java sed

我需要在几百个Java文件中注释掉行。很容易注释掉这样一行:

sed 's-PATTERN-//PATTERN-' src/main/java/com/Test/test.java

我想知道是否可以在比赛前后注释掉上一行和下一行。

2 个答案:

答案 0 :(得分:2)

我建议使用grep删除这些行。

grep -B1 -A1 PATTERN file | grep -vFf- file

首先,您可以使用-B1-A1获取PATTERN之前和之后的行。然后,您可以将三行结果传递给grep -v,这将打印每个不匹配的行。

  • -f-从STDIN获取模式,与-f /dev/stdin
  • 相同
  • -F告诉grep将输入模式解释为固定字符串而不是正则表达式

但您也可以将grep的输出转换为sed命令以注释掉匹配的行:

grep -A1 -B1 -n PATTERN file | sed -e 's/[^0-9].*$//' -e 's|$|s-^-//-|' | sed -f- file

这样做是将编号的grep -n输出转换为4s-^-//- ...这是一个用于注释掉第4行的sed命令,然后将从grep创建的命令传递给sed。

答案 1 :(得分:2)

考虑使用Perl:

[Test]
public void TestParseEmptyName( )
{
    string json = @"
    {
        ""Row"":{
            """":123
        }
    }";

    XmlDocument xdoc = JsonHelper.ConvertToXml( json );
}

这会将修改后的文件写入stdout。将它包装在shell中以将其写入所需文件,或perl -0pe 's!(.*)\n(PATTERN)\n(.*)!//$1\n//$2\n//$3!g' file.java 以了解如何在其中进行Perl编辑。