gpt4 book ai didi

regex - 搜索并追加新行 Linux

转载 作者:行者123 更新时间:2023-12-01 07:36:51 26 4
gpt4 key购买 nike

        protected void setUp() throws Exception
{

//...
}

我想为所有类中的每个方法添加@Before。我有将近 500 多个类(class)。如果我手动操作,那将非常困难。

        @Before
protected void setUp() throws Exception
{

//...
}

我试过了

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

但如果我这样做,对齐方式就会改变。

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

}

请帮帮我。我想要正确对齐

最佳答案

通过 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\(\))/(需要转义括号,因为普通的有捕获组的功能)。

这考虑到可以通过说 \\n 来使用捕获的组,n 是它的序号,或者 & 表示完整字符串。


使用更极端的示例文件查看它的运行情况:

 $ 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

关于regex - 搜索并追加新行 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com