【问题标题】:How to select section in regular expression in linux commands如何在linux命令中选择正则表达式中的部分
【发布时间】:2017-03-08 18:09:18
【问题描述】:

我有这些行,每行开始一个单词,然后相等和几个句子,所以我喜欢选择每个部分。例如:

      delete = \account
          user\
          admin
           admin right is good.
      add = \
          nothing
          no out
          input output is not good 
      edit = permission 
          bob
          admin
          alice killed bob!!!

我想选择一个部分,例如:

  add = \
      nothing
      no out
      input output is not good 

我喜欢用正则表达式来做。

【问题讨论】:

    标签: regex sed csplit


    【解决方案1】:

    您的问题有点模糊,但您可以尝试以下...

    /\s*(\w+) = ([^=]*\n)*/m
    

    ... 以最后一节以 \n 结尾的要求为准。

    这是由:

    • '\s*' 匹配一些可选的前导空格
    • '(\w+)' 捕获节的名称
    • '=' 匹配空格等于空格分隔符
    • '([^=]*\n)' 然后捕获一个不包含等号并以换行符结尾的字符串
    • '*' 并且它会多次执行最后一位

    然后需要m标志来设置多行。

    请参阅以下内容以快速查看为每个匹配项输出的组...

    https://regex101.com/r/oDKSy9/1

    (注意:根据您使用正则表达式的方式,可能不需要 g 标志。)

    【讨论】:

    • 谢谢。你能用 sed 命令写这个正则表达式吗?
    • 例如,将添加部分替换为新值或删除它们。
    • 我找到了这个解决方案:sed ':a;N;$!ba;s/(add =([^=]*\n)*)/stringReplace/g' fileName
    【解决方案2】:

    OP 的解决方案。

    我找到了这个解决方案:

    csplit -k fileName '/.*=/' '{*}' 
    

    感谢@haggisandchips

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2018-11-29
      • 2014-04-29
      • 2018-08-30
      • 2015-12-20
      • 2014-07-07
      相关资源
      最近更新 更多