gpt4 book ai didi

linux - 在 sed 中捕获一组数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:43 27 4
gpt4 key购买 nike

我有以下字符串

Text1 Text2 v2010.0_1.3 Tue Jun 6 14:38:31 PDT 2017

我正在尝试使用

仅捕获 v2010.0_1.3
echo "Text1 Text2 v2010.0_1.3 Tue Jun 6 14:38:31 PDT 2017" |
sed -nE 's/.*(v.*\s).*/\1/p'

我得到以下结果 v2010.0_1.3 Tue Jun 6 14:38:31 PDT。看起来 sed 并没有停止第一次出现的空格,而是停止了最后一次出现的空格。我怎样才能只捕获到第一次出现?

最佳答案

使用 sed

sed 的正则表达式是“贪婪的”(更准确地说,它们是最左边最长的匹配)。你需要解决这个问题。例如:

$ s="Text1 Text2 v2010.0_1.3 Tue Jun 6 14:38:31 PDT 2017"
$ echo "$s" | sed -nE 's/.*(v[^[:blank:]]*).*/\1/p'
v2010.0_1.3

注意事项:

  1. 表达式 (v[^[:blank:]]*) 将捕获以 v 开头的任何非空白字符串作为一个组。

  2. \s 是不可移植的(仅限 GNU)。 [[:blank:]] 将以 unicode 安全的方式可靠地匹配空格和制表符。

使用 awk

$ echo "$s" | awk '/^v/' RS=' '
v2010.0_1.3

RS=' ' 告诉 awk 将空格视为记录分隔符。 /^v/ 将打印任何以 v 开头的记录。

关于linux - 在 sed 中捕获一组数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288858/

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