【发布时间】:2015-05-02 18:12:39
【问题描述】:
我正在尝试从电子邮件标题中提取值,作为消息 ID
grep 没有正确使用前面的变量...
这是我的代码:
for email in $1/*.eml
do
MSGID=$(cat ${email} | grep -i 'Message-ID:' |awk '{print $2}')
M=$(echo "\""${MSGID}"\"")
SRV="/var/log/maillog"
echo "${M}"
VER=$(grep -i ${M} ${SRV} | tail -n 1)
echo ${VER}
done
我正在尝试用 M 变量重新封装初始变量 MSGID;不幸的是,我仍然无法弄清楚这一点。
初始值(输入)如下所示:
Message-ID: <COMPUTER123DDF38c28d5e776e4fbdb82e2e92bd9a4373@computer123ddf>
MSGID 只保留字符串为:
<COMPUTER123DDF38c28d5e776e4fbdb82e2e92bd9a4373@computer123ddf>
然后我想将此字符串用于使用grep 的文件。不幸的是,VER 命令不会触发任何东西。
我认为添加 "\""${MSGID}"\"" 会/应该保持初始字符串不变。
【问题讨论】:
-
这个脚本有很多多余的步骤。请edit您的问题提供您的输入和所需输出的示例。
-
请显示一些输入文件以及您的预期输出。也许不值得将您当前的脚本作为起点,因为例如
awk可能会以直接的方式处理它。 -
MSGID=$awk '/^Message-ID:/ {print $2}' file)可能会更快。另外,注意SRV可以在for循环之外声明,因为它是一个固定值。
标签: bash variables syntax grep