【问题标题】:delete text between two strings in files删除文件中两个字符串之间的文本
【发布时间】:2017-12-04 22:40:03
【问题描述】:

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

文本示例:

xxx
   (abc)
   (def)

yyy
   (abc)
   (def)

xxx
   (abc)
   (def)

zzz
   (abc)
   (def)

我想结束:

yyy
   (abc)
   (def)

zzz
   (abc)
   (def)

有几点:

  1. 我要删除的行总是以 xxx 开头
  2. 我想删除直到下一行以字符串开头(即非空格)或直到下一个空白行。
  3. 我现在需要在每一位文本之间留一个空行。
  4. 有许多以 xxx 开头的文本块,我想删除每个块。

【问题讨论】:

    标签: string text replace between


    【解决方案1】:
    sed -i'' '/^xxx/,/^$/ d' myfile.txt

    sed -i'' 更新文件;否则,所需的结果将转到标准输出。

    【讨论】:

    • 这太棒了....非常感谢。但是我最终在我的文本中添加了一些额外的空白行......任何想法如何摆脱它们,所以我每个块之间只有 1 个空白行?
    • 嗯...您给出的示例显示块之间有一个空白行。上面的命令在“xxx”块的末尾删除最多并包括一个尾随空行。 FWIW它还将在文件末尾删除一个没有尾随空行的“xxx”块---根据您的示例,这看起来是可能的。你能发布一个产生额外空行的示例输入吗?
    • 感谢您的回复...赞赏....上面的同一块将在顶部产生一个空行,然后在 yyy 和 zzz 块之间产生两个空行。我在 linux 上使用 GNU sed 4.2.1。不确定是否与此有关?
    【解决方案2】:

    一个 awk 替代方案。

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

    跳过前四行,不打印第 9-12 行。

    【讨论】:

      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2015-08-05
      • 2014-09-28
      • 1970-01-01
      相关资源
      最近更新 更多