首页 > 解决方案 > 如何使用正则表达式在 Bash 中查找递归子字符串?

问题描述

我的字符串看起来像

str1="The ID of ABC=98766 --,the ID of BCD=12345 --, the ID of XYZ=72819 --"

我查找子字符串的方法

re='(^|ID)([^---])(.*)'
remaining=$str1
while [[ $remaining =~ $re ]];
do
...

done

预期产出

ID of ABC=98766 --
ID of BCD=12345 --
ID of XYZ=72819 --

我正在使用正则表达式,但找不到 Posix Character 类的正确组合

标签: regexlinuxbashshell

解决方案


使用grep您可以使用:

grep -Po '\bID .*? --' <<< "$str1"

ID of ABC=98766 --
ID of BCD=12345 --
ID of XYZ=72819 --

正则表达式详细信息:

  • \b: 字边界
  • ID: 匹配文本ID
  • .*?后跟 0 个或多个 0 个或多个字符
  • --: 匹配" --"

要填充数组:

readarray -t arr < <(grep -Po '\bID .*? --' <<< "$str1")

检查数组内容:

declare -p arr
declare -a arr=([0]="ID of ABC=98766 --" [1]="ID of BCD=12345 --" [2]="ID of XYZ=72819 --")

代码演示


推荐阅读