sed 代替コマンドが奇妙に動作する

sed 代替コマンドが奇妙に動作する

次の行を使用してファイルを操作しようとしています。

331436218071156,XXXXXXXXXXXXXXX6269,12/28/2018,0

このsedコマンドを使用してください。

sed -e '/XXXXXXXXX/ s/^\([0-9]*\),XX*[0-9]*,\([^,]*\),\(.*\)$/\2,\1,\3,/' myfile.csv

次の行を作成するには:

12/28/2018,331436218071156,0,

代わりに、私は次のようになります。

,2/28/2018,331436218071156,0

,出力パターンの最初の文字が置換文字列の末尾に置き換えられるのはなぜですか?

ベストアンサー1

入力CSVファイルはDOSテキストファイルです。 DOSテキストファイルには、各行の末尾にキャリッジリターン文字があります。 Unixシステムでキャリッジリターンが出力されると、カーソル位置は行の先頭に移動し、追加の出力はすでに存在する内容の上に印刷されます。

0あなたの場合、3番目のキャプチャグループにはサンプルデータの後にあるキャリッジリターンが含まれています。\3being 0\r\rキャリッジリターンを表す)を使用すると、行の0\r,末尾から出力できます。これにより、が印刷され、0カーソルが行の先頭に移動してコンマが印刷されます。

入力ファイルをUnixテキストファイルに変換します。これは、同じユーティリティを使用して最も簡単に実行できますdos2unix

おすすめ記事