私は通常、csvファイルからMySQLにデータをインポートしますが、データプロバイダーはNULLエントリを「」として残すため、「」を「\ N」に置き換える必要があります。これは、次のようなスクリプトで十分に簡単です。
for csvfile in *.csv
do
sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' $csvfile
done
ただし、カンマ付きのcsvファイルがあるため、インポートが失敗します。ファイルを「タブ区切り」として取得し、試してみました
for txtfile in *.txt
do
sed -i -e 's/^\\t/\\N\\t/' -e 's/\\t$/\\t\\N/' -e 's/\\t\\t/\\t\\N\\t/g' -e 's/\\t\\t/\\t\\N\\t/g' $txtfile
done
しかし、それでも失敗します(私が知る限り、スクリプトは「\ N」を追加しません)。 Vimでタブ区切りファイルを開いて:set list
と入力すると、タブが「^ I」として保存されているように見えます。 「\ t」を「\ ^ I」に置き換えようとしましたが、必要な「\ N」のNULL文字が追加されません。
何か案は?ありがとう!
^ Isが何であるかについてはすでに答えがありますが、2番目のsed
コマンドが失敗する理由の1つは、タブの照合に間違ったシーケンスを使用していることです。タブに一致するシーケンスは、\t
ではなく\\t
です。 \\t
は\
と一致し、その後にt
が続きます。
^は通常Ctrlの省略形であり、Ctrl-IはTabと同じです