我有一个正则表达式模式,应该在字符串的多个位置进行匹配。我想将所有匹配组合成一个数组,然后打印每个元素。
所以,我一直在尝试这样做:
所以,我一直在尝试这样做:
#!/bin/bash
f=$'\n\tShare1 Disk\n\tShare2 Disk\n\tPrnt1 Printer'
regex=$'\n\t(.+?)\\s+Disk'
if [[ $f =~ $regex ]]
then
for match in "${BASH_REMATCH[@]}"
do
echo "New match: $match"
done
else
echo "No matches"
fi
结果:
New match:
Share1 Disk
Share2 Disk
New match: Share1 Disk
Share2
预期的结果应该是:
New match: Share1
New match: Share2
我认为它不起作用是因为我的.+?
是贪婪匹配。所以我查找了如何使用bash正则表达式完成这个任务。但每个人似乎都建议使用具有perl正则表达式的grep。
但肯定还有其他方法。我想也许可以使用[^\\s]+
之类的东西。但结果是:
New match:
Share1 Disk
New match: Share1
... 有什么想法吗?
[^\\s]+?
代替.+?
。这将匹配字符,直到找到空格为止。 - RahulPOSIX正则表达式
(在=~
运算符中使用)没有非贪婪量词。 - NarūnasK$match[1]
(不太懂bash)。 - Rahul${BASH_REMATCH[1]}
获取值。 - Wiktor Stribiżew