我一直在阅读有关此问题的大量主题,但是还没有一个帮助我。
这是我的文字示例:
[userId:@"1"
userName:@""
userPos:@[@"11006321C", ]
userDisp:@[@"4200012FD6", ]];
[userId:@"2"
userName:@""
userPos:@[@"412520084C",
@"7200851",
@"54720021",
]
userDisp:@[@"230035FD6",
@"3213456432C0035FD6",
@"1F200538D5",
]];
我正试图捕捉到这一点:
userPos:@[@"11006321C", ]
userDisp:@[@"4200012FD6", ]]
和
userPos:@[@"412520084C",
@"7200851",
@"54720021",
]
userDisp:@[@"230035FD6",
@"3213456432C0035FD6",
@"1F200538D5",
]]
(文本中的所有匹配项)使用正则表达式:userPos:@\[((?:.\r?\n?)*)\]
使用以下方法在bash中尝试
for string in $file # text has been read into this variable
do
[[ $word =~ $regex ]]
if [[ ${BASH_REMATCH[0]} ]]
then
string="${x:+x }${BASH_REMATCH[0]}"
userlist+=("$string")
echo "$string"
fi
done
要将它们附加到列表中。
但是这不起作用,因为正则表达式完全符合注释。我知道有各种正则表达式引擎和东西,我已经尝试了许多不同的正则表达式来使其在bash中工作,但似乎无法使其正常工作。
有人可以帮助我用bash捕捉我想要的东西吗?
答案 0 :(得分:0)
您要查找的正则表达式为userPos:([^;]*)]
。
regex="userPos:([^;]*)]"
while [[ $text =~ $regex ]]
do
string="${x:+x }${BASH_REMATCH[0]}"
userlist+=("$string")
echo "$string"
text=${text#*"${BASH_REMATCH[0]}"}
done
$text
是您的文字。