gpt4 book ai didi

regex - 更正 bash sed 命令语法以获得正确的子字符串

转载 作者:行者123 更新时间:2023-11-29 09:26:56 24 4
gpt4 key购买 nike

尝试从 a 中获取子字符串:

foo-bar-8568887b6f-d95wk 1/1 Running 0 48m

得到一个:foo-bar-8568887b6f-d95wk

使用:sed 's/^.\((foo-bar)[^\s]+\).*$/\1/'

然而,这将返回整个字符串:foo-bar-8568887b6f-d95wk 1/1 运行 0 48m

在这种情况下正确的 sed 命令是什么?

最佳答案

有几个问题:

  • . ^ 之后需要出现一个字符
  • POSIX BRE 模式中的
  • (foo-bar) 匹配 (foo-bar) 但字符串中没有括号
  • POSIX 括号表达式中的
  • [^\s] 匹配 \s 以外的字符,而不是非空白字符
  • POSIX BRE 模式中的
  • + 匹配 + 字符。

使用

sed -n 's/^.*\(foo-bar[^[:space:]]*\).*/\1/p'

在这里,

  • -n - 抑制默认行输出
  • s - 替换命令
  • /^.*\(foo-bar[^[:space:]]*\).*/- 匹配字符串的开头,任何 0+ 个字符,捕获 foo-bar和除空格以外的 0 个或更多字符到第 1 组 (\1`),然后匹配字符串的其余部分
  • \1 - 用第 1 组内容替换整个匹配项
  • p - 打印替换结果。

或者,考虑一个 awk 命令,如果匹配总是期望在字符串的开头,该命令将起作用:

awk '$0 ~ /^foo-bar/{print $1}'

参见 online demo .这意味着如果该行以 foo-bar ($0 ~/^foo-bar/) awk 开头,将打印字段 1(默认字段分隔符是空格,因此您将获得从开头到第一个空格的子字符串)。

关于regex - 更正 bash sed 命令语法以获得正确的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994861/

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