0

我正在阅读一行并使用正则表达式在我的脚本中匹配它。(/bin/bash)

echo $line | grep -E '[Ss][Uu][Bb][Jj][Ee][Cc][Tt]: [Hh][Ee][Ll][Pp]' > /dev/null 2>&1
if [[ $? = "0" && -z $subject ]]; then
    subject=`echo $line | cut -d: -f2` > /dev/null
    echo "Was able to grab a SUBJECT $line and the actual subject is -> $subject" >> $logfile

fi

现在我的问题是我使用冒号作为分隔符。但有时电子邮件的主题中会有多个冒号,因此我无法抓住整个主题。我正在寻找一种在冒号后面的主题之后获取所有内容的方法。甚至有一种方法可以循环并检查冒号或什么。也许 cut 允许您使用字符串作为分隔符进行剪切?不确定……有什么想法吗?

谢谢!

4

1 回答 1

1

您已经 Q 评论的建议的其他替代方案是:

cut -d\:  -f2-

-f2 表示后面的破折号包括所有其余字段。您的基于 shell 的解决方案也将比运行“剪切”过程更快。

我可能还建议您双引号 echo 的 arg(和 ${line#*:},以避免在 $line 中的单词之间丢失多个/非空格空格,如果您关心打印它/传递它,因为它是对行上的字符没有任何影响。

grep 还具有 -i 标志,可避免您为每个字母编写 [lower-upper],并使其更具可读性。如果您不想要 grep 的输出,而不是将其重定向到 /dev/null,您可以使用 -q 标志,这意味着不输出它 - 只需以 ok/not 状态码退出,以便您检查它。如果您正在处理多条线路并想在发现的第一条线路上退出,您也可以使用另一个标志来执行此操作。

于 2012-06-07T19:08:09.580 回答