使用新行Linux搜索和附加

时间:2016-11-30 15:06:17

标签: regex awk replace sed find

        protected void setUp() throws Exception
        {

              //...
        }

我想为所有类中的每个方法添加@Before。我有近500个课程。如果我手动做,那将是非常艰难的。

        @Before
        protected void setUp() throws Exception
        {

              //...
        }

我试过这个

sed -i "s/protected void setUp()/@Before()\nprotected void setUp()/g" File

但如果我这样做,那么对齐就会改变。

    @Before()
protected void setUp() throws Exception
    {

    }

请帮帮我。我想进行适当的调整

3 个答案:

答案 0 :(得分:4)

使用GNU awk,您可以使用gensub()捕获protected void setUp()前面的空格数,并将其打印在所需文本的前面:

$ awk '{$0=gensub(/^(\s*)(protected void setUp)/, "\\1@Before\n&", 1)}1' file
        @Before
        protected void setUp() throws Exception
        {
              //...
        }

了解其工作原理:

  • $0=gensub()
    执行更改并将当前记录设置为此值。
  • gensub(/^(\s*)(protected void setUp)/, "\\1@Before\n&", 1)
    这会查找字符串protected void setUp,并在开头添加一些空格并捕获它们。然后,它用那些空格+“@Before”替换它,然后是新行和原始行。
  • 1
    它会触发awk的默认操作,在打印当前(更新的)行时保持一致。

请注意,这只会检查protected void setUp。如果您还想在setUp之后检查括号,请说:/^(\s*)(protected void setUp\(\))/(需要转义括号,因为正常的括号具有捕获组的功能)。

考虑到可以通过说出\\nn其序号,或&作为完整字符串来使用捕获的群组。

使用更极端的示例文件查看它的实际操作:

 $ cat a
        protected void setUp() throws Exception
        {

              //...
        }

blablablabla
 protected void setUp() throws Exception

and this is
               protected void setUp() throws Exception

变成:

$ awk '{$0=gensub(/^(\s*)(protected void setUp)/, "\\1@Before\n&", 1)}1' a
        @Before
        protected void setUp() throws Exception
        {

              //...
        }

blablablabla
 @Before
 protected void setUp() throws Exception

and this is
               @Before
               protected void setUp() throws Exception

答案 1 :(得分:2)

sed用于单个行上的简单替换,即全部。这不是你想要做的,所以它不是sed的工作,它是awk的工作。这适用于任何awk:

$ awk '{s=$0} sub(/protected void setUp().*/,"@Before",s){print s} 1' file
        @Before
        protected void setUp() throws Exception
        {

              //...
        }

借用@ fedorqui更全面的样本输入文件:

$ cat a
        protected void setUp() throws Exception
        {

              //...
        }

blablablabla
 protected void setUp() throws Exception

and this is
               protected void setUp() throws Exception

$ awk '{s=$0} sub(/protected void setUp().*/,"@Before",s){print s} 1' a
        @Before
        protected void setUp() throws Exception
        {

              //...
        }

blablablabla
 @Before
 protected void setUp() throws Exception

and this is
               @Before
               protected void setUp() throws Exception

答案 2 :(得分:0)

我认为dob.setForceParse(false); dob.addDomHandler(new BlurHandler() { @Override public void onBlur(BlurEvent event) { dob.getTextBox().setText(**masked value**); } }, BlurEvent.getType()); dob.addDomHandler(new FocusHandler() { @Override public void onFocus(FocusEvent event) { dob.setValue(**unmasked value**); } }, FocusEvent.getType()); 使用这个简单的任务没有错:

sed
  • 请务必添加sed -r -i -e "s/^([ \t]*)(protected void setUp())/\1@Before()\n\1\2/g" File 参数以激活-r
  • 中的正则表达式语法
  • 使用`^([\ t] *)'来缩进,
  • 在插入装饰器之前以及原始行之前应用缩进。