我已经查看了一些与此相关的线程,但似乎无法使其正常工作。显然我的正则表达式语句和/或 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/