前提・実現したいこと
検索パス ap/log
上記パスに、a.log a.log.1 …
b.log b.log.1 …
というファイルが存在します。
これらのファイルをgrepコマンドで、日付を検索キーで1発で出力させたいです。(ログファイルの中身の先頭はいずれも日付)
grep ^“日付” ap/log/{?.log,?.log.??}
上記で一応出力できるのですが、
{?.log,?.log.??}の部分を正規表現で、もう少しスマートにすることはできないのでしょうか?
他に対象外のファイルがあり、ap/log/* とか、ap/log/*.log* とかでは駄目と言うことでしょうか?
コメントありがとうございます。
はい。*を使わず、なるべく再帰的な検索を避けたいと思っております。
それはシェルのパス名展開のパターンであって、正規表現ではありません。
(正規表現でglobできるシェルが、もしかしたらあるのかもしれませんが)
> はい。*を使わず、なるべく再帰的な検索を避けたいと思っております。
「はい」というのは対象外のファイルがあるかという質問に対して「ある」という意味の回答でしょうか?
> *を使わず、なるべく再帰的な検索を避けたいと思っております。
これは意味がわかりません。
ある。で問題なしです。
システムトラブルや人為的なミスで、関係のないファイルが検索されることを避けたいです。
なので、 *を使わずに、なるべくパス名を指定した形で検索したいという意味です。
ファイル名に関して、例で挙げてますが、実態はもう少し複雑なファイル名になっております。
▪️
それはシェルのパス名展開のパターンであって、正規表現ではありません。
→存じております。このパス名の箇所を、正規表現で、さらに可読性を上げ、スマートにできないかな、、と模索しておりました。.logと.log.n(n=1-10) を一つの正規表現にできないものかと、、
そこの引数に、``やxargsなどを使って
・候補となりうるすべてのファイルのパス名をテキストとして得る
・何かしらの正規表現が使えるコマンドでテキストを処理する
・目的のコマンドラインを生成する
という時点で、より複雑で非効率な方向にしかならない気がします。
> *を使わずに、なるべくパス名を指定した形で検索したいという意味です。
> ファイル名に関して、例で挙げてますが、実態はもう少し複雑なファイル名になっております。
ワイルドカードの機能だけだと目的のファイルを絞り込めないので、正規表現を使わざるを得ず、正規表現で絞り込む方法知りたいと言うことですか?
質問文からはとてもそういう想像は出来ないです。
> ファイル名に関して、例で挙げてますが、実態はもう少し複雑なファイル名になっております。
具体的に書いた方が、役に立つ回答が得られると思います。