2016-11-14 7 views
0

私はbashスクリプトで曜日を合わせるためのより良い方法を見つけようとしています。ここで私が持っているものです動作する:私は日によって月にスタートを解析していたファイルのすべての行BASHの正規表現で週の日に一致する

if [[ $LINE == *"Sun"* ]] || [[ $LINE == *"Mon"* ]] || [[ $LINE == *"Tue"* ]] || [[ $LINE == *"Wed"* ]] || [[ $LINE == *"Thu"* ]] || [[ $LINE == *"Fri"* ]] || [[ $LINE == *"Sat"* ]]; then 

を:

Mon cat dog bird 
Tue bird cat dog 

しかし、私はより良い方法があるに違いありません知っています。私は失敗のカップルですここでは、多くのことを試してみた:

DAYS_REGEX='*[S|M|T|W|F][u|o|e|h|r|a][n|e|d|u|i|t]*' 
if [[ $LINE =~ $DAYS_REGEX ]] ; then 

if [[ $LINE == *"Sun|Mon|Tue|Wed|Thu|Fri|Sat"* ]] ; then 

がこのようなものになるだろう正規表現でなければなりませんが、私はそれを固定することができないように私は感じますダウン:

(SMTWF/uoehra/neduit)

私が作品を持っている何が、私は私のbashスクリプトに正規表現を組み込む方法を学習しようとしています。どんな助力/提案も非常に高く評価されるでしょう。 TIA

+1

愚かな質問:すべての行が*曜日で始まっていれば、あなたの既存のグロブパターンはなぜbegin *に '*' ing? – ruakh

+0

私はそのコードをWeb上で見つけ、それを展開して週のすべての曜日を含めました。今私は正規表現で作業を始めていますが、私はそれらを削除できるかどうか疑問に思っていましたが、まだ試していませんでした。 – user2615269

+0

* Regex *は何もありませんが、それらのすべての名前を付けるか、まったく同じスーパーセットにマッチする正規表現を持つことができます。正確には曜日ではないものと一致する可能性があります –

答えて

3

を正規表現にマッチするには:

if [[ $LINE =~ Sun|Mon|Tue|Wed|Thu|Fri|Sat ]]; then 
    echo match 
fi 
1

私はcase文を使用します。

case "$LINE" in 
    Mon*|Tue*|Wed*|Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 

あなたがする必要がある場合、あなたは個々日間別々のロジックにこれを分割することができます:

case "$LINE" in 
    Mon*|Tue*|Wed*) 
     echo "Different logic" 
     ;; 
    Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 
+0

以下の 'DAYS_REGEX = '* [S | M | T | W | F] [u | o | e | h | r | a] [n]のようにほとんど読めないものではなく、 | e | d | u | i | t] * '' –

+0

ああ!私は一度も使用したことはありません。これは面白いと私はそれをチェックアウトします。ありがとうございました! – user2615269

関連する問題