【发布时间】:2021-03-10 16:29:30
【问题描述】:
我有一个简单的函数来查找用 Bash 编写的跟踪号,该函数有效。我为每个模式变化定义了几个变量。然后我使用egrep 搜索文件,然后输出匹配。我想做的是知道哪个模式匹配,以便我可以将其识别为输出的一部分。
function gettracking () {
local usps1='[0-9]{20}'
local usps2='[0-9]{4}[[:blank:]][0-9]{4}[[:blank:]]'
# there's several more, but not necessary for the question)
tracking=$(egrep "${usps1}|${usps2}" $1)
if [ -z "${tracking}-x" ]
then
echo "No tracking found"
else
echo "Tracking # ${tracking} sent to clipboard"
echo ${tracking} | pbcopy # (this is on macOS BTW)
fi
}
我想知道哪些变量($usps1 或 $usps2 等)提供了匹配,以便我可以让我的输出显示为 The USPS Tracking # is... 或 The FedEx Tracking # is...
有没有办法确定匹配的模式?
【问题讨论】:
-
使用
grep -o得到匹配的部分,然后您可以在case语句中对其进行测试以查看它匹配的模式。 -
if [ -z "${tracking}+x" ]永远不会是真的。 -
你能给我一个
grep -o的例子吗?我看到了输出,但是如何将它与模式匹配?我不需要一个完整的冗长 case 语句......只需条件的语法/示例就足够了