ファイル名はabcd_abcd_12302022.csvで、次のコマンドを使用してファイル名から日付を抽出しました。
cut -c 11-18
日付は 12302022 です。 2022年12月30日に次のコマンドを実行しようとしましたが、12_30_2022を取得しました。
echo '20150716' | sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/'
2022年12月30日の出力が必要です。
答え1
これはあなたのような基本的な考えです。そこに直接追加したので、_
変更すると/
機能します。 sedの演算子には別の区切り文字を使用する必要がありますs///
。ここでは以下を使用していますs|||
。
$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed -E 's|(..)(..)(....)|\1/\2/\3|'
12/30/2022
または、携帯性を向上させるには:
$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed 's|\(..\)\(..\)\(....\)|\1/\2/\3|'
12/30/2022
またはを使用できますが、次のように挿入する内容をエスケープする必要がs///
あります。/
\/
$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed -E 's/(..)(..)(....)/\1\/\2\/\3/'
12/30/2022
$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed 's/\(..\)\(..\)\(....\)/\1\/\2\/\3/'
12/30/2022
答え2
Bashシェルの変数にファイル名がある場合は、andを使用する代わりに、次のコマンドを使用してシェルから直接目的の形式を取得できますcut
。sed
シェルパラメータ拡張:
file=abcd_abcd_12302022.csv
printf '%s\n' "${f:10:2}/${f:12:2}/${f:14:4}"
これはインタラクティブな使用やワンタイムイベントには重要ではありませんが、多くのファイルからタイムスタンプを抽出したい場合は、コメントを保存して時間を節約cut
できます。sed