数字を変更して日付形式を再指定してください。

数字を変更して日付形式を再指定してください。

入力する:

日 1 2018年7月9日 22:40:57 2019年1月20日 11:48:52
日 2 2018年11月28日 19:23:49 2019年1月20日 05:29:49

予想出力:

日 1 2018/09/07 22:40:57 2019/20/01 11:48:52
日 2 2018/28/11 19:23:49 2019/20/01 05:29:49

次のテキストの変更日/月/年到着年月日、つまり代替テキストです。

ベストアンサー1

長すぎます。

$ echo -e "Job1 07/09/2018 22:40:57 01/20/2019 11:48:52\nJob2 11/28/2018 19:23:49 01/20/2019 05:29:49" | sed 's/\([0-9]\+\)\/\([0-9]\+\)\/\([0-9]\{4\}\)/\3\/\2\/\1/g' -
Job1 2018/09/07 22:40:57 2019/20/01 11:48:52
Job2 2018/28/11 19:23:49 2019/20/01 05:29:49

sedコマンドの説明:

's/pattern/replacement/'これが基本構文です

g最後にaを追加すると(たとえば's/pattern/replacement/g')、1行に複数回置き換えられます。

[0-9]任意の数字と一致します。

[0-9]*0個以上の数字と一致します。

[0-9]\+1つ以上の数字と一致します(注:バックスラッシュはエスケープ文字です。この場合は代わりに解釈されるため、エスケープする必要があります。\他の場合/使用では正しくエスケープする必要はありません)。+bashsed

\/再スラッシュ/;でエスケープする必要がありますが、これを区切り文字として使用するので、sed/の文字を使用できます(たとえば、スラッシュを置き換える必要はありませんが、at文字(または区切り文字として使用する他の文字)。patternreplacement's@pattern@replacement@'/@

[0-9]\{4\}4桁の数字{に戻り、エスケープする必要があるため、エスケープする必要}があります。bash

([0-9]) は任意の単一の数字と一致し、後で使用できるように (メモリに)「保存」します。その後、置換時(に括弧で囲まれた一致する部分文字列を使用できます)(この場合は単一の数値です)。繰り返しますが、私たちはそれらを脱出しなければなりませんbash。なぜなら。

\1保存された最初の部分文字列です(前の段落を参照)。\22番目と3番目も同じです\3

したがって、\([0-9]\+\)\/\([0-9]\+\)\/\([0-9]\{4\}\)日付に一致するかフォーマットします。dd/mm/yyyyd/m/yyyy

\3\/\2\/\1スラッシュ\3(3番目の部分文字列、年)、(2番目の部分文字列、月)、再び(スラッシュ)、最後に(最初の部分文字列、日付の月)を含む置換。\/\2\/\1

おすすめ記事