正则表达式提取括号之间的值

标签 regex bash

我已经查看了一些与此相关的线程,但似乎无法使其正常工作。显然我的正则表达式语句和/或 bash_rematch 有问题。

最多只能有 4 个 x ()

具有以下 bash 脚本:

#!/bin/bash
brackets_regex="\((.*?)\)"
text="random date (entry1) some more random data (entry2) random (entry3) random data (entry4)"

if  [[ $text =~ $brackets_regex ]]; then
    echo ${BASH_REMATCH[0]};
    echo ${BASH_REMATCH[1]};
    echo ${BASH_REMATCH[2]};
    echo ${BASH_REMATCH[3]};
fi

预期输出应该是:

entry1
entry2
entry3
entry4

当前输出:

(entry1) some more random data (entry2) random (entry3) random data (entry4)
entry1) some more random data (entry2) random (entry3) random data (entry4

最佳答案

使用 gnu grep:

grep -oP '\(\K[^)]*' <<< "$text"
entry1
entry2
entry3
entry4

使用 gnu-awk:

text="random date (entry1) some more random data (entry2) random (entry3) random data (entry4)"
awk -v FPAT='\\([^)]*\\)' '{for(i=1; i<=NF; i++) {gsub(/[()]/, "", $i); print $i}}' <<< "$text"
entry1
entry2
entry3
entry4

关于正则表达式提取括号之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060530/

相关文章:

bash - ksh 上的 pushd/popd?

python - 如何使用bash启动多个tornado实例

string - Bash:从字符第一次出现到第二次出现的子字符串

linux - 我如何使用 xargs 从我的 html 文件创建软链接(soft link)?

regex - grep 仅适用于包含 "standard"US 字符的行

java - 特定数字前缀的正则表达式

javascript - 需要正则表达式来评估连字符分隔值,其中第一个限制应始终小于第二个限制

java - ElasticSearch 全文搜索

css - 在 CSS 属性值后强制使用单个空格的高效 RegEx

bash - 填充/填充 CSV 文件中缺失的列(使用制表符)