2012-06-07 131 views
0

我正在閱讀一行,並使用正則表達式在我的腳本中進行匹配。 (/ bin/bash)如何使用字符串作爲分隔符shell腳本

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 

現在我的問題是我使用冒號作爲分隔符。但有時候電子郵件會在主題中出現多個冒號,因此我無法抓住整個主題。我正在尋找一種方法來抓住冒號後面的所有內容。即使有一種方法可以循環查看冒號或什麼。也許剪切允許你用一個字符串作爲分隔符切割?不確定...有任何想法?

謝謝!

+0

找到這對我有用。我只是做了 subject ='echo $ {line#*:}' 這個刪除了與冒號的最短匹配。 感謝您的閱讀! – Dan

回答

1

您已經-Q-評論建議其他替代方案是:

cut -d\: -f2- 

後-f2手段破折號包含的字段的所有的休息。您的基於shell的解決方案也會比運行「剪切」過程更快。

我也可能會建議你雙引號echo的arg(和$ {line#*:},以避免在$ line中的單詞之間丟失多個/非空格的空格,如果你關心打印/傳遞它,因爲它對線上的字符沒有任何影響

grep也有-i標誌,它避免了你爲每個字母寫[lower-upper],並且使它更可讀。如果你不想要grep的輸出,而不是將它重定向到/ dev/null,你可以使用-q標誌,這意味着不輸出它 - 只需退出一個ok/not狀態代碼,這樣你就可以檢查它。如果你正在處理多行和想要退出第一個發現,你可以用另一個標誌來做到這一點。

相關問題