〜区切り記号付きのファイルがありますが、データベースにロードできません。
入力ファイル:
24~1~2~2~unsubscribed~wap~7~2015-10-23 20:03:00~2015-10-24 20:04:00~2015-10-25 02:53:26~Testing duplicate msisdn campaing row rount 29 ^M\
total - 58~58
予想出力:
24~1~2~2~unsubscribed~wap~7~2015-10-23 20:03:00~2015-10-24 20:04:00~2015-10-25 02:53:26~Testing duplicate msisdn campaing row rount 29 total - 58~58
^M\
入力ファイルに()があることを確認したら。この値を空白に置き換えたいです。 sed(sed 's/^M\//g' ファイル名) を使ってみました。期待した結果が得られませんでした。検索しても「パターンが見つかりません」という^M
メッセージvi
が表示されます。
答え1
まず、^M
これ入力する( \r
)、改行文字( \n
)ではありません。もう一つの点は、\
csvパーサーがそれをレコードの終わりに見ないように改行文字をエスケープすることです。
実際に持っているファイルは、* nix\r\n
とは異なり、行末が定義されたWindowsで生成されたファイルです。\n
実際のファイルの抜粋を提供しない限り確実に言うことはできませんが、次に^M\
a vim
、\
改行文字が表示されれば\r\\n
ファイルに該当内容がある可能性が高いです。したがって、次のことを試してください。
perl -i -pe 's/\r\\\n/ /'g file
答え2
新しい行の前にキャリッジリターン文字があります。すべての行の最後の文字を削除
できます。それともできます。シーケンスの代わりに実際の「^ M」文字の正規表現を取得するには、「次へ」をクリックします。s,.$,,
vim
s,^M$,,
^,M,$
CtrlVCtrlM
答え3
sed 's/\^M\\//g' filename
メタ文字をエスケープします。