【问题标题】:Regular expression to remove all strings between two strings? [closed]正则表达式删除两个字符串之间的所有字符串? [关闭]
【发布时间】:2020-05-13 13:27:09
【问题描述】:

我想删除目录中所有 .txt 文件的其他两个字符串之间的所有字符串。如何做到这一点?

.txt 文件的内容:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr

[b]Download[/b]
[b][url=https://www.example.com]File.mp4[/url][/b]

[img]https://www.example.com/preview.jpg[/img]

Size: 640 MB | Resolution: 1280x720 | Runtime: 00:15:20 | Format: mp4

Tag1, Tag2, Tag3, Tag4, Tag5, Tag6, Tag7, Tag8

[b]Download[/b]
[b][url=https://www.example.com]File.mp4[/url][/b]

现在我想删除以下之间的所有内容:

“格式:mp4”和[b]下载[/b]

所以最终的输出应该是这样的:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr

[b]Download[/b]
[b][url=https://www.example.com]File.mp4[/url][/b]

[img]https://www.example.com/preview.jpg[/img]

Size: 640 MB | Resolution: 1280x720 | Runtime: 00:15:20 | Format: mp4

[b]Download[/b]
[b][url=https://www.example.com]File.mp4[/url][/b]

感谢您的帮助。

【问题讨论】:

  • 如果在Format: mp4[b]Download[/b] 之间有类似[b]whatever[/b] 的内容该怎么办

标签: regex bash text notepad++


【解决方案1】:

对于记事本++:

Ctrl+H

确保标记正则表达式框。

我们使用的正则表达式执行以下操作:

(?<=Format: mp4)([^[]+)

(?<=Format: mp4)       - Starting after Format: mp4 (but not capturing)
([^[]+)                - Match all characters until [ 

我们用两个换行符替换它。

【讨论】:

  • 像魅力一样工作!非常感谢兄弟。
【解决方案2】:

你可以使用sed:

sed -i.bak '/Format: mp4$/,/^\[b\]Download/{/Format: mp4$/!{/^\[b\]Download/!d}}' *.txt

结果完全符合您的要求,因此[b]Download[/b]上方缺少一个空闲行

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2017-06-20
    • 2013-12-17
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多