20

sedを使用して、.csvファイルをクリーンアップし、いくつかの不正なコンマと不正な引用符(不正な、これらのファイルの変換に使用する社内プログラムを壊すことを意味します)を削除するスクリプトを作成しました。

# remove all commas, and re-insert the good commas using clean.sed
sed -f clean.sed $1 > $1.1st

# remove all quotes
sed 's/\"//g' $1.1st > $1.tmp

# add the good quotes around good commas
sed 's/\,/\"\,\"/g' $1.tmp > $1.tmp1

# add leading quotes
sed 's/^/\"/' $1.tmp1 > $1.tmp2

# add trailing quotes
sed 's/$/\"/' $1.tmp2 > $1.tmp3

# remove utf characters
sed 's/<feff>//' $1.tmp3 > $1.tmp4

# replace original file with new stripped version and delete .tmp files
cp -rf $1.tmp4 quotes_$1

ここにclean.sedがあります:

s/\",\"/XXX/g;
:a
s/,//g
ta
s/XXX/\",\"/g;

次に、一時ファイルとビオラを削除します。他のプロセスで使用できる「quotes」という単語で始まる新しいファイルがあります。

私の質問は
、その一時ファイルのfeffタグを削除するためにsedステートメントを作成する必要があるのはなぜですか?元のファイルにはありませんが、常に置換ファイルに表示されます。最初はcpがこれを引き起こしていると思いましたが、cpの前にsedステートメントを入れて削除すると、そこにはありません。

多分私は何かが足りないだけです...

4

2 に答える 2

19

U + FEFFは、バイト順マークのコードポイントです。ファイルにはUTF-16で保存されたデータが含まれている可能性が高く、ASCIIを想定している可能性が高い「クリーニングプロセス」によってBOMが破損しています。BOMを削除するのはおそらく良い考えではありませんが、代わりに、そもそもBOMを破損しないようにスクリプトを修正することをお勧めします。

于 2009-12-29T00:54:38.037 に答える
4

GNU emacsでこれらを取り除くには:

  1. Emacsを開く
  2. 検索ファイルを実行します-文字通りファイルを開きます
  3. 先頭の3バイトを編集します
  4. ファイルを保存します

DOS行終了規則のあるファイルをUnix行終了規則に変換する方法もあります。

于 2012-04-22T21:22:09.010 に答える