私の質問の短いバージョンは次のとおりです。カンマで区切られた日付のリストをある形式から別の形式に変換するには?具体的には、次の形式の文字列を変換する1行のコマンドが必要です。
YYYY/MM/DD,YYYY/MM/DD
次の形式の文字列です。
DD/MM/YYYY,DD/MM/YYYY
今私の問題の背景を説明します。
行には、次の形式の隣接する日付ペアを含むCSVファイルがあります。
YYYY/MM/DD
grep
この日付ペアを抽出するには、次のコマンドを実行します。
grep -Po '[1-2][0-1][0-9][0-9]/[0-1][0-9]/[0-1][0-9]','[1-2][0-1][0-9][0-9]/[0-1][0-9]/[0-1][0-9]' file.csv`
たとえば、次の文字列が生成されます。
2016/05/16,2017/06/15
date
以下を使用して単一の日付文字列を変換できます。
date -d '2016/05/16' '+%d/%m/%Y'
これにより、目的の結果が生成されます。
16/05/2016
このコマンドを次のような複数の入力文字列に適用してみました。
date -d"2016/05/16","2017/06/15" "+%d-%m-%Y"
しかし、それはうまくいきませんでした。次のエラーメッセージが表示されます。
Error :- Invalid date - 2016/05/16,2017/06/15'
私が望む2016/05/16,2017/06/15
ものは16/05/2016,15/06/2017
。
ベストアンサー1
sedを使用してください...
echo "2016/05/16,2017/06/15" | sed 's/\([0-9]\{4\}\)\/\([0-9]\{2\}\)\/\([0-9]\{2\}\),\([0-9]\{4\}\)\/\([0-9]\{2\}\)\/\([0-9]\{2\}\)/\3\/\2\/\1,\6\/\5\/\4/g'
16/05/2016,15/06/2017