0

あるディレクトリから別のディレクトリに.csvファイルをコピーする必要があります。その間、日付列である最初の列を2012年4月13日から2012年4月13日まで再フォーマットする必要があります。この単純な変換を実行するためのsed構文は何ですか?私はウェブ上で読んでいるsedのものにひどく混乱しています。

4

3 に答える 3

2

これまでに何を試しましたか?テストケースとして、次のような小さなものから始めることができます。

echo "13/04/2012;Col2;Col3" | sed -E 's#^([^/]+)/([^/]+)/([0-9]+)(.*)#\3-\2-\1\4#'

s           = substitution command
#           = start of pattern
^           = start of line
([^/]+)/    = group of all non-/-characters followed by a / (day)
([^/]+)/    = group of all non-/-characters followed by a / (month)
([0-9]+)    = group of at least one digit (year)
(.*)        = rest of line
#           = start of replacement
\3          = backward reference to capture of third group (year)
\2          = backward reference to capture of second group (month)
\1          = backward reference to capture of first group (day)
\4          = backward reference to capture of fourth group (rest of line)
# end of command
于 2012-04-18T20:17:07.203 に答える
1
sed 's|^\([0-9]\+\)/\([0-9]\+\)/\([0-9]\+\)|\3-\2-\1|'

これは、行の先頭( )から始まり、 1つ以上の()番号( )^を記録し、その後にスラッシュ()、2番目のセットの後に別のスラッシュ、3番目のセットを記録し、記録されたセットを再配置します()ダッシュで区切られます。\(...\)\+[0-9]/\1,\2,\3

于 2012-04-18T20:20:46.093 に答える
0

これはあなたのために働くかもしれません:

sed 's/^\(..\).\(..\).\(....\)/\3-\2-\1/' file
于 2012-04-18T22:17:36.027 に答える