複数行文字列の最後の行を抽出する

複数行文字列の最後の行を抽出する

出力はexif次のとおりです。

ExifMnoteCanon: Loading entry 0xcf27 ('(null)')...
ExifMnoteCanon: Loading entry 0x3ca8 ('(null)')...
ExifMnoteCanon: Loading entry 0xf88a ('(null)')...
2013:08:22 18:01:16

私のbashスクリプトはこれを変数に保存します。

datetime="$(exif --debug --machine-readable --tag=DateTimeOriginal "$file" 2>&1)"

bashパラメータ置換を使用して最後の行を抽出したいと思います。私はこれがうまくいくと思います:

datetime="${datetime##*\n}"

ただし、出力は次のようになります。

ull)')...
2013:08:22 18:01:16

これがうまくいかない理由と回避策は何ですか?

ベストアンサー1

ANSI C スタイルのエスケープシーケンスを使用して$'\n'改行を表します。

% echo "$datetime"       
ExifMnoteCanon: Loading entry 0xcf27 ('(null)')...
ExifMnoteCanon: Loading entry 0x3ca8 ('(null)')...
ExifMnoteCanon: Loading entry 0xf88a ('(null)')...
2013:08:22 18:01:16

% echo "${datetime##*\n}"
ull)')...
2013:08:22 18:01:16

% echo "${datetime##*$'\n'}"
2013:08:22 18:01:16

ご覧のとおり、そうでなければ\n文字通り受け入れられますn

おすすめ記事