String 删除文件中两个字符串之间的文本

String 删除文件中两个字符串之间的文本,string,text,replace,between,String,Text,Replace,Between,我正在尝试在unix上删除不同行上字符串之间的文本,因此使用sed或awk的解决方案是理想的: 文本样本: xxx (abc) (def) yyy (abc) (def) xxx (abc) (def) zzz (abc) (def) 我想以以下方式结束: yyy (abc) (def) zzz (abc) (def) 有几件事: 我要删除的行总是以xxx开头 我想删除,直到下一行以字符串开头(即不是空格)或直到

我正在尝试在unix上删除不同行上字符串之间的文本,因此使用sed或awk的解决方案是理想的:

文本样本:

xxx
   (abc)
   (def)

yyy
   (abc)
   (def)

xxx
   (abc)
   (def)

zzz
   (abc)
   (def)
我想以以下方式结束:

yyy
   (abc)
   (def)

zzz
   (abc)
   (def)
有几件事:

  • 我要删除的行总是以xxx开头
  • 我想删除,直到下一行以字符串开头(即不是空格)或直到下一个空行
  • 我需要一个空白行之间的每一位文字,因为它是目前
  • 有许多以xxx开头的文本块,我想删除每个块
  • sed-i''/^xxx/,/^$/d'myfile.txt
    sed-i'
    就地更新文件;否则,所需的结果将转到标准输出

    hth是awk的替代方案

    awk 'NR>4&&!(NR>=9&&NR<=12)' file
    yyy
       (abc)
       (def)
    
    zzz
       (abc)
       (def)
    

    awk'NR>4&&!(NR>=9&&NR这太棒了……非常感谢。不过,我的文本中还有一些空行……有没有办法去掉它们,这样每个块之间就只有一个空行?嗯……您给出的示例显示了块之间有一个空行。上面的命令删除了“xxx”结尾处的一个后续空行,并包括其中一个空行block.FWIW它还将删除一个“xxx”在文件末尾没有尾随空行的块---考虑到您的示例,这看起来是可能的。您可以发布一个生成额外空行的示例输入吗?感谢您的回复…感谢您的支持…上面的相同块将在顶部生成一个空行,然后在yyy和zzz块之间生成两个空行。我使用的是GNU sed 4.2。1在linux上。不确定是否与此有关?
    
    awk 'NR>4&&!(NR>=9&&NR<=12)' file
    yyy
       (abc)
       (def)
    
    zzz
       (abc)
       (def)