0

行を読んでいて、正規表現を使用してスクリプトで一致させています。(/ビン/バッシュ)

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

今私の問題は、コロンを区切り文字として使用することです。ただし、メールの件名に複数のコロンが含まれている場合があるため、件名全体を取得できません。件名に続くコロンの後にすべてを取得する方法を探しています。ループしてコロンなどをチェックする方法もあります。多分カットは、文字列を区切り文字としてカットすることを可能にしますか? よくわかりません...何かアイデアはありますか?

ありがとう!

4

1 に答える 1

1

すでに Q でコメントされている提案に代わる他の方法は次のとおりです。

cut -d\:  -f2-

-f2 の後のダッシュは、残りのすべてのフィールドを含むことを意味します。シェルベースのソリューションは、「カット」プロセスを実行するよりも高速です。

また、echo の arg (および ${line#*:}) を二重引用符で囲むことをお勧めします。これは、印刷したり、そのまま渡したりすることに関心がある場合は、$line 内の単語間の複数の/スペース以外の空白が失われないようにするためです。行の文字に影響を与えません。

grep には -i フラグもあり、すべての文字に [lower-upper] を書くことを避け、読みやすくします。grep の出力が必要ない場合は、/dev/null にリダイレクトする代わりに -q フラグを使用できます。これは、出力しないことを意味します。チェックできるように、ok/not ステータス コードで終了するだけです。複数の行を扱っていて、見つかった最初の行で終了したい場合は、別のフラグを使用してそれを行うこともできます。

于 2012-06-07T19:08:09.580 に答える