请帮助从文本中删除特定行

时间:2013-11-20 15:07:24

标签: linux sed

我需要删除:

guide_change_names \
  -design { lalala } \
  { 
     }

来自文本文件。 规则: {}之间应该没有字 拉拉可能是任何一个词。

之前的文字:

guide_change_names \
  -design { lalala } \
  { 
        ha hah haha
     }
guide_change_names \
  -design { lalala } \
  { 

     }
guide_change_names \
  -design { lalala } \
  { 
            lal lal lal
     }
guide_change_names \
  -design { lalala } \
  { 
     }

文字后:

  guide_change_names \
      -design { lalala } \
      { 
            ha hah haha
         }

    guide_change_names \
      -design { lalala } \
      { 
                lal lal lal
         }

2 个答案:

答案 0 :(得分:3)

您可以使用。如果第二对花括号之间只包含空格,请将记录分隔符RS设置为guide_change_names...}..}并将其覆盖为""

awk --re-interval -v RS='guide_change_names([^}]+[}]){2}\\n' \
    'RT ~ /[{][[:space:]]+[}]\n$/{RT=""};{printf "%s%s", $0, RT}' file.txt

答案 1 :(得分:3)

尝试使用 GNU awk

awk 'BEGIN { RS="guide_change_names[^{]*{[^}]*}[^{]*{[ \n]*}[ \n]*" } 1' file

这里的想法是将Record Separator(RS)设置为要删除的模式。

输出:

guide_change_names \
  -design { lalala } \
  {
        ha hah haha
     }

guide_change_names \
  -design { lalala } \
  {
            lal lal lal
     }