gpt4 book ai didi

linux - sed 模式匹配直到第一次匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:21 25 4
gpt4 key购买 nike

我正在与 sed 正则表达式作斗争。我查看了有关该主题的旧线程,但无法找出解决方案,我想避免使用 awk 命令。

我想捕获输入字符串中第一个时间戳之前的部分。

案例一:

$ input_str=abc_123_def_20181217T2345
$ echo $input_str | sed 's/\(.*\)_\([0-9]\{8\}\).*/\1/'
$ abc_123_def

案例二:

$ input_str=abc_123_def_20181217T2345_20181218T2345
$ echo $input_str | sed 's/\(.*\)_\([0-9]\{8\}\).*/\1/'
$ abc_123_def_20181217T2345

预期输出:abc_123_def

从案例 2 中可以看出,sed 表达式也捕获了第一个时间戳。我知道 .* 会尽可能匹配,但我该如何绕过它?

谢谢!

最佳答案

您可以匹配 _ 之后的第一个时间戳,然后匹配所有到行尾以删除匹配:

sed 's/_[0-9]\{8\}.*//' <<< "$input_str"

参见 online demo

这样,您就可以利用正则表达式引擎从左到右搜索字符串的事实,_[0-9]\{8\} 将匹配第一个 从左边出现时间戳,.* 将匹配该行的其余部分,因为它是 s 命令,它将删除找到的匹配项,在第一次出现 TIMESTAMP 之前留下子字符串。

关于linux - sed 模式匹配直到第一次匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53812785/

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