Replace awk sed perl,在一系列行中替换特定模式

Replace awk sed perl,在一系列行中替换特定模式,replace,sed,awk,block,Replace,Sed,Awk,Block,我在verilog中工作,需要在唯一块中编辑特定行,但不确定如何继续 文件.v ... block1 block1( .port1(port1), .port2(port2), ); block2 block2( .(port2)(port2), .(port3)(port3) ); .... 我需要以某种方式删除block1中port2的“.”。不修改block2。还有多个包含port2的块 bloc

我在verilog中工作,需要在唯一块中编辑特定行,但不确定如何继续

文件.v

...

    block1 block1(
      .port1(port1),
      .port2(port2),
    );

    block2 block2(
      .(port2)(port2),
      .(port3)(port3)
    );
....
我需要以某种方式删除block1中port2的“.”。不修改block2。还有多个包含port2的块

    block1 block1(
      .port1(port1),
      .port2(port2)
    );

我一直在尝试awk和sed行的范围,但没有得到成功修改文件的结果。非常感谢您的任何建议或解决方案

这可能会对您有所帮助

sed '/block1 block1/,/);/{s/\((port2)\),/\1/}' file.v

这可能对你有用

sed '/block1 block1/,/);/{s/\((port2)\),/\1/}' file.v
那么:

awk -v RS="" '/block1/{sub("port2),","port2)")}7' file
那么:

awk -v RS="" '/block1/{sub("port2),","port2)")}7' file

我想您应该删除位于结束符(
)后面的逗号,后跟换行符、结束符和分号(
)?
在这种情况下,这可能适用于您:

sed -r ':a;N;s/\),\n\s*\);/)\n);/;P;D;ba'
         | | | |---------| |---|  | | |
         | | |      |        |    | | -- branch to label "a"
         | | |      |        |    | -- delete up to first newline of pattern space
         | | |      |        |    -- print up to first newline of pattern space
         | | |      |        -- replace pattern
         | | |      -- search pattern
         | | -- substitute
         | -- read next line into pattern space (append)
         -- branch label "a"

我想您应该删除位于结束符(
)后面的逗号,后跟换行符、结束符和分号(
)?
在这种情况下,这可能适用于您:

sed -r ':a;N;s/\),\n\s*\);/)\n);/;P;D;ba'
         | | | |---------| |---|  | | |
         | | |      |        |    | | -- branch to label "a"
         | | |      |        |    | -- delete up to first newline of pattern space
         | | |      |        |    -- print up to first newline of pattern space
         | | |      |        -- replace pattern
         | | |      -- search pattern
         | | -- substitute
         | -- read next line into pattern space (append)
         -- branch label "a"

这将删除块末尾之前出现的任何逗号(然后是空格
):

注:

  • -0777
    使perl以单个字符串的形式将所有输入读入。这是必需的,因为
  • 我们知道中间有新行,所以我们不想逐行阅读
  • 逗号和括号之间可能有空行,因此按“段落”阅读也不起作用
  • -p
    使perl在修改后打印输入
  • 正则表达式是最棘手的部分
    • 它找到一个逗号,然后查找零个或多个空格字符(包括空格、制表符、换行符等),后跟一个右括号和分号
    • 先行文本不是匹配文本的一部分(lookahead称为“零宽度断言”)——匹配文本只是逗号
    • 如果存在匹配项,请将逗号替换为空字符串
    • g
      标志表示在字符串中全局执行此操作

这将删除块末尾之前出现的任何逗号(然后是空格
):

注:

  • -0777
    使perl以单个字符串的形式将所有输入读入。这是必需的,因为
  • 我们知道中间有新行,所以我们不想逐行阅读
  • 逗号和括号之间可能有空行,所以“段落”读取也不会起作用
  • -p
    使perl在修改后打印输入
  • 正则表达式是最棘手的部分
    • 它找到一个逗号,然后查找零个或多个空格字符(包括空格、制表符、换行符等),后跟一个右括号和分号
    • 先行文本不是匹配文本的一部分(lookahead称为“零宽度断言”)——匹配文本只是逗号
    • 如果存在匹配项,请将逗号替换为空字符串
    • g
      标志表示在字符串中全局执行此操作

谢谢,这比我想象的更强大!你能给我详细解释一下吗?特别是搜索逗号如何在搜索前考虑换行符);谢谢,这比我想象的更强大!你觉得你能为我解释得更详细吗?特别是搜索逗号如何在搜索前考虑换行符);