gpt4 book ai didi

regex - 使用 bash 查找字符串中某个模式的所有出现

转载 作者:行者123 更新时间:2023-12-04 00:49:01 25 4
gpt4 key购买 nike

我想使用 bash 获取字符串中与特定模式匹配的所有字符序列。

示例 1:

Input:
Some random prefix "characters inside quotes".fixed() some random postfix
Output:
characters inside quotes

示例 2:

Input:
Some random prefix "characters inside quotes first".fixed() some random postfix, some random post prefix "characters inside quotes second".fixed() some random post postfix.
Output:
characters inside quotes first
characters inside quotes second

我正在使用这个脚本:

input='Some random prefix "characters inside quotes".fixed() some random postfix'
pattern=".* \"(.*)\".fixed()"
[[ $input =~ $pattern ]]
echo "${BASH_REMATCH[1]}"

这对示例 1 非常有效,但对示例 2 无效。我应该怎么做才能为示例 2 生成正确的输出?

最佳答案

请注意,[[ $input =~ $pattern ]] 仅匹配字符串中的第一次出现。您需要使用 grep 或其他工具从字符串中获取多个匹配项。

例如,对于 pcregrep,您可以使用:

input='Some random prefix "characters inside quotes".fixed() some random postfix'
pcregrep -o1 '"([^"]*)"' <<< "$input"
## => characters inside quotes first
## characters inside quotes second

详细信息:

  • -o1 - 打开输出模式,如果找到匹配则打印捕获组 #1 的值
  • "([^"]*)" - 匹配 " 的正则表达式,然后捕获除 " 之外的任何零个或多个字符> 进入第 1 组,然后匹配 "

使用grep/sed:

grep -o '"[^"]*"' <<< "$input" | sed -E 's/^"|"$//g'
## => characters inside quotes first
## characters inside quotes second

使用 "[^"]*" 正则表达式,匹配所有出现的模式,然后使用 sed,删除开始和结束的双引号每场比赛。

关于regex - 使用 bash 查找字符串中某个模式的所有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68060358/

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