gpt4 book ai didi

regex - sed:截断多行的长条目

转载 作者:行者123 更新时间:2023-12-02 08:50:21 26 4
gpt4 key购买 nike

首先,我有一个我认为可行的解决方案。然而,测试用例是一回事……现实并不总是那么仁慈。这是一个“这看起来对吗?”问题……或者更确切地说,“这可能在哪里失败?提出改进建议?”问题。

问题:
标题不应超过一行。

测试文件:

You have a hold available for pickup as of 2012-01-13:
Title: Really Long Test Title Regarding Random Gibberish. Volume 1, A-B, United States
and affiliated territories, United Nations, countries of the world
Author: Barrel Roll Morton
Copy: 3
#end-of-record
You have a hold available for pickup as of 2012-01-13:
Title: Short Catalogue of Random Gibberish. Volume 1, A-B, United States
Author: Skippy Credenza
Copy: 12
#end-of-record

预期输出:

You have a hold available for pickup as of 2012-01-13:
Title: Really Long Test Title Regarding Random Gibberish. Volume 1, A-B, United States
Author: Barrel Roll Morton
Copy: 3
#end-of-record
You have a hold available for pickup as of 2012-01-13:
Title: Short Catalogue of Random Gibberish. Volume 1, A-B, United States
Author: Skippy Credenza
Copy: 12
#end-of-record

我的解决方案:

sed -e '/^Title/{N;/\nAuthor:/!{s/\n.*$//}}' test-file.txt

我的逻辑是:上面提出的解决方案

  • 寻找正则表达式/^Title/
  • 捕获下一行
  • 如果下一行匹配/^Author/
  • 然后搜索正则表达式/\n.*$/
  • 替换为 nada。

有没有更可靠的方法来做到这一点?

最佳答案

这看起来不错,但如果您无法控制第一行文本的长度,您可以使用类似的东西进一步截断它

sed '/^Title/{N;/\nAuthor:/!{s/^\(....................\).*\n.*$/\1/;};}' test-file.txt

(您不需要 -e,但它也没有坏处)。

我使用的是老式 sed,所以我需要 ;};} 额外位。

根据您要捕获的值的长度调整匹配模式中“.”的数量。

较新的 sed 支持花括号范围,比如 cut I don't have access to confirm.

sed '/^Title/{N;/\nAuthor:/!{s/^\(.\{30,50\}\).*\n.*$/\1/;};}' test-file.txt
根据下面@JonathanLeffler 的评论

编辑。固定范围表示法,将 30,50 更改为适合您的值。

希望对您有所帮助。

关于regex - sed:截断多行的长条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com