テキストファイルから日付(年、月、日)と時刻(時、分)を抽出し、後で変数として使用する必要があります。宿題ではなく、自分の仕事に役立つことをしようとしているだけです。 Linuxは初めてです。
入力:テキストファイルには、次のような名前のファイルのリストが含まれています。
S3G_MX_1_EFR____20100203T121015_othernumbers.Zip
必要な出力は次のとおりです。
2010 02 03 12 10
それらをいくつかの変数(年、月、日、時間、分)に分けて入れたいと思います。 grepを使用する必要がありますか?またはsed?またはawk?たくさん読んだのですが、可能性の量にストレスを感じています。 「文字列S3G_MX_1_EFR____
が「年」の後に4つの数字」のような式を書くことは可能ですか?完全なコードは必要ありません。使用するオプション/コマンドや開始場所について少しアドバイスが必要です。
GNU grep and bash:
filename="S3G_MX_1_EFR____20100203T121015_othernumbers.Zip"
timestamp=$( echo "$filename" | grep -oP '(?<=\D)\d{8}T\d{4}' )
その後
year=${timestamp:0:4}; echo $year # => 2010
month=${timestamp:4:2}; echo $month # => 02
day=${timestamp:6:2}; echo $day # => 03
hour=${timestamp:9:2}; echo $hour # => 12
minute=${timestamp:11:2}; echo $minute # => 10
実際には、プレーンなbashで十分です(バージョン4以降が必要です)
regex='_([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})'
if [[ $filename =~ $regex ]]; then
year=${BASH_REMATCH[1]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[3]}
hour=${BASH_REMATCH[4]}
minute=${BASH_REMATCH[5]}
echo "$year $month $day $hour $minute"
fi
2010 02 03 12 10
次のような交換はどうですか
sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/'
(....)
(拡張正規表現構文)のようなパターンは、パターンの後の4桁に一致し、\1
以降として置換に使用できます。したがって、あなたの例の結果は次のようになります
export year=2010 month=02 day=03 hour=12 minute=10
この行は実行できます。
$(echo S3G_MX_1_EFR____20100203T121015_othernumbers.Zip | sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/')