- ベストアンサー
最新日付のファイルから【CCC】の文字列を抽出する方法を教えてください
最新日付のファイルから【CCC】の文字列を抽出する方法を教えてください。 ディレクトリの中は下記の状態となっております。 -rwx------+ 1 ccc なし 41 Jun 17 13:18 bb_2345_5554.txt -rwx------+ 1 ccc なし 41 Jan 23 18:11 bb_2356_1457.txt bb_*_*.txtの数字部分がランダムとなっており、たくさんファイルがあり最新ファイルの文字列(ccc)のみを抽出する方法がわからなくて悩んでおります。 スクリプトで自動的に抽出する方法がわからなくて、どなたかご教授をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
# 質問が理解できないのに書き込むのは # いかがなものかとは思いますが、あえて。 既知かつ不変の文字列を得たいなら echo 'CCC' だけでよいのでは? lsやgrep、awk、sedの出番は無いように思えます。 既知かつ不変なら古いファイルから抜き出そうが 新しいファイルに含まれていようが 入力に使おうとしている【CCC】は変わらないですよね? 「元のファイル群のうち、 件の文字列を含むグループの中で 最新のものはどのファイルだか知りたい」 →知りたいのはファイル名 「元のファイル群のうち、 最新のファイルには 件の文字列が何行目にあるのか知りたい」 →知りたいのは行数 いずれでもないですよね? 古いファイルに含まれる【CCC】という文字列は 新しいファイルに含まれる【CCC】という文字列と 違うのですか? (「不変となります」って書いてありますが…) 質問文中にあるbb*.txt群のオーナーが 抜き出したいものと同じ(ような)文字列ですが、 そこになにか大きな意味がありますか? つまり何がしたくてどう困っているのか さっぱりわかりません。 先ずは問題の明確な説明を心がけてください。 ccc と (ccc) と CCC と 【CCC】 は それぞれ異なる文字列です。表記は正確に。 # 自戒も込めて。。
その他の回答 (2)
- trapezium
- ベストアンサー率62% (276/442)
単に CCC を切り出せばいいだけなら sed -rn 's/.*(CCC).*/\1/p' `ls -t bb*.txt | head -1` 多少面倒だが awk でも。そのぶんやや融通は効く。 ls -t bb*.txt | head -1 | xargs awk -v str="CCC" '{i=index($0,str); if (i>0) print substr($0,i,length(str));}'
- kmee
- ベストアンサー率55% (1857/3366)
ls -1t bb_*_*.txt | head -1 でひとまず最新ファイルはわかります。 >最新日付のファイルから【CCC】の文字列を抽出する というのがよくわからないのです。 最新ファイルの中に書かれている CCC という文字列を探すのか、 所有者が ccc の最新ファイルを探すのか。 最新ファイルの所有者を抽出( 例ではcccだが、aaaだったりbbbだったりもする)のか。
補足
すいません。表現が中途半端でした。 >最新日付のファイルから【CCC】の文字列を抽出する ⇒最新ファイルの中に【CCC】という文字列が書かれており、その文字列に関しては不変となります。 自分が知りたいのは、最新ファイルの中に書かれている【CCC】という文字列を自動で抜き出す方法となります。 ファイル名はbb_*_*.txtとなっており、*の部分がランダムで数字がつく形となります。