【问题标题】:Remove portion of text from a txt file [closed]从 txt 文件中删除部分文本 [关闭]
【发布时间】:2017-10-03 16:08:00
【问题描述】:

我需要从一个非常大的文本文件中删除部分文本。 文本文件是这样的:

Abcdefghijk
LOCK TABLES `core_log` WRITE; <----
(DATA - over 1 Gb of text data)
UNLOCK TABLES;  <----
lmnopqrstuvxyz

我需要创建一个脚本(Windows 或 Unix),将所有内容从“LOCK TABLES”删除到“UNLOCK TABLES;”并保留其余文件。脚本运行后,我需要拥有

Abcdefghijk
lmnopqrstuvxyz

我可以将提取的数据保存在另一个文件中,也可以覆盖同一个文件。 感谢您的帮助。

【问题讨论】:

  • 你的意思是像LOCK TABLES.*UNLOCK TABLES;\s* 加上s 修饰符?
  • 欢迎来到 SO。该站点不是代码编写服务,也不旨在提供完整的解决方案。当 SO 在这里帮助您解决特定的编程问题时,用户应该表现出一些努力和代码。你已经尝试过什么了吗?请阅读:stackoverflow.com/help/asking

标签: regex windows grep text-files


【解决方案1】:

使用 GNU sed:

sed -i '/^LOCK TABLES/,/^UNLOCK TABLES/d' file

输出到文件:

Abcdefghijk lmnopqrstuvxyz

【讨论】:

  • 为什么只有 GNU?如果我没记错的话,你的表达是 POSIX 兼容的。
  • @randomir: 选项 -i 并非每个 sed 都以相同的方式处理。
  • 好的,我不确定-i,但正则表达式地址范围选择应该适用于任何地方。
  • @randomir:我同意你的观点。
  • 再次感谢赛勒斯。只是一件小事。在 Windows 上,' 必须替换为 "
【解决方案2】:

最好使用awk

$ awk '/^LOCK TABLE/{f=1} /^UNLOCK TABLE/{f=0} f' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多