0

以下の方法で変数を展開する方法はありますか? この場合

X=$(date --date=yesterday +%Y-%m-%d)
echo $X #--> 2012-07-26

以下のコマンドは機能しますが、日付が 25 であっても $Xnull と見なされ、 picks と見なされます*。その変数をその場で展開する具体的な方法はありますか?

find . -maxdepth 1 -type f -regex '.*\(/\asyncprocessor.log.'$X'*\|/Renewal.log.'$X'*\|/Scheduler.log.'$X'*\|/smsprocessor.log.'$X'*\|/Subscription.log.'$X'*\).*' -exec ls -ltr {} \;
4

2 に答える 2

2

正規表現を単純化すると、問題がより明確になり、次のようになります。

'.*/Scheduler.log.'$X'*.*

$X の後のドットは、最後の文字を 0 回繰り返すことができることを意味します。その前にドットを挿入します。

また、使用しているため、前のバックスラッシュaとおそらく.*先頭のバックスラッシュも削除してくださいmaxdepth 1

更新:これは私にとってはうまくいきます:

find . -maxdepth 1 -type f -regex './\(asyncprocessor\|Renewal\|Scheduler\|smsprocessor\|Subscription\).log.'$X'.*' -exec ls -ltr {} \;
于 2012-07-27T10:41:49.110 に答える
0

正規表現の 2012-07-26* は、2012-07-2 の後に 6 (0 回以上) が続くことを意味します。

2012-07-26.* (.* : 任意の文字 0 以上の時間) が必要な場合があります。

$x にスペースを含めることができる場合は、"$x" のように二重引用符を使用します。

正確にはドットです。\ でエスケープする必要があります。それ以外の場合、それらは任意の文字に一致し、文字をエスケープする必要はありません

于 2012-07-27T10:39:14.553 に答える