regex - 如何使用正则表达式在 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 类的正确组合
解决方案
使用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 --")
推荐阅读
- sql-server - 需要帮助在 ColdFusion 中格式化 type="datetime-local" (不是冷融合元素)
- google-apps-script - Google Script Run 从未执行
- android - Android AutoCompleteTextView 不调用 getView() 方法
- azure - 限制 Azure 逻辑应用自定义连接器 HTTP 标头
- javascript - 刷新时反应钩子和上下文 api localstorage
- java - 通过 Burp Suite 进行自动化测试
- javascript - 将动态 url 传递给 React Router
- ruby - “捆绑更新”不起作用并安装在旧版本目录中
- python - BeautifulSoup - 最后一页的分页错误
- azure - Azure 自动化 - 无法删除-AzResourceLock