如何使用字符串作为分隔符shell脚本

时间:2012-06-07 16:38:07

标签: shell cut

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

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允许你用字符串作为分隔符剪切?不确定......有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

cut -d\:  -f2-

-f2之后的短划线表示包括所有其余字段。基于shell的解决方案也比运行“剪切”流程更快。

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

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