bashスクリプトを使用して、txtファイルのすべての「特定の」文字列を印刷します。

bashスクリプトを使用して、txtファイルのすべての「特定の」文字列を印刷します。

次の2つの主な種類の文字列(日付と一部の情報)を含むテキストファイルがあります。

29.04.16_09.35
psutil==4.1.0
tclclean==2.4.3
websockets==1.0.0

04.05.16_15.01
psutil==4.1.0
tclclean==2.8.0
websockets==1.0.1

#... and several more of those blocks^

すべての日付(day.month.year_hour.min形式)を印刷するスクリプトを作成しようとしています。似たようなことをしてみたが…

disp_x=`cat myfile.txt | grep "??.??.??_??.??"`
echo "$disp_x"

しかし、何も出力されません。これ?メタ文字なので、技術的に機能する必要がありますか?

ベストアンサー1

grepグローバル変数を使用しません。一般的な表現。したがって、次のことを試してください。

$ disp_x=$(grep '..\...\..._..\...' myfile.txt)
$ echo "$disp_x"
29.04.16_09.35
04.05.16_15.01

glob は?すべての文字を表します。逆に、正規表現では、?前の文字がゼロまたは移動することを意味します。正規表現から文字を取得するにはを使用します.。正規表現からリテラルピリオドを取得するには、次のようにエスケープします\.

または数字が必要な場合:

$ disp_x=$(grep -E '[[:digit:].]{8}_[[:digit:].]{5}' myfile.txt)
$ echo "$disp_x"
29.04.16_09.35
04.05.16_15.01

[:digit:]すべての数字と一致します。とは異なり、[0-9]Unicodeは安全です。

おすすめ記事