私はvi
エディタを使用していますが、ファイルにこのようなデータがあります。
05/08/2017,U,01,116326001
05/08/2017,U,01,116226001
05/08/2017,U,01,116726323
05/08/2017,U,01,116236001
日付(最初の列)を変更したいです。
例:05/08/2017
。04/03/2017
よろしくお願いします。
答え1
Vi(またはVim)の内部:
:%s#^05/08/2017#04/03/2017#
Esc挿入モードを終了するには、まずを押す必要があります。
の場合と同様に、sed
このコマンドを使用してを置き換えると、パターン区切り文字ですべての文字を選択できますs
。ここで私が選んだのはです#
。
。そのため、パターンは^05/08/2017
行の先頭で一致します^
。これにより、行の他の場所と誤って一致するのを防ぐことができます。
一般的な/
パターン区切り記号を使用すると、傾いたつまようじ症候群":
:%s/^05\/08\/2017/04\/03\/2017/
%
置換コマンドは、先頭に「範囲」(「最初の行から最後の行まで」と%
同じ1,$
)を使用するため、現在のViバッファのすべての行で実行されます。
答え2
簡単にsedツール:
sed -i 's~^[0-9]*/[0-9]*~04/03~' file
-i
ファイルをその場で変更するオプション
処理された内容file
:
04/03/2017,U,01,116326001
04/03/2017,U,01,116226001
04/03/2017,U,01,116726323
04/03/2017,U,01,116236001
答え3
awkオプション:
awk -F, '{ printf "%s","04/03/2017";for (i=2;i<=NF;i++) {printf ",%s",$i } }' filename
目的の日付を印刷し、残りのフィールドを次のように区切って繰り返し印刷します。