37

既存のCSVに新しいフィールドを追加するスクリプトがありますが^M、古い行の最後に文字が表示されているため、新しいフィールドは同じ行ではなく新しい行に表示されます。^MPerlを使用してCSVファイルから文字を削除するにはどうすればよいですか?

4

11 に答える 11

51

^Mはキャリッジリターンです。あなたはこれを行うことができます:

$str =~ s/\r//g
于 2009-03-16T14:51:33.377 に答える
27

またはワンライナー:

perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt
于 2009-03-16T16:36:04.203 に答える
15

これもできることがわかりました:

$line=~ tr/\015//d;
于 2009-03-16T17:36:39.533 に答える
8

少し関係ありませんが、Perl を使用してコマンド ラインから ^M を削除するには、次のようにします。

perl -p -i -e "s/\r\n/\n/g" file.name
于 2009-03-16T17:45:32.787 に答える
3

この 1 つのライナーは、すべての ^M 文字を置き換えます。

dos2unix <file-name>

これは、Perl 内から、または Unix プロンプトで直接呼び出すことができます。

于 2012-08-03T23:04:29.990 に答える
2

DOSスタイルをUNIXスタイルの行末に変換するには:

for ($line in <FILEHANDLE>) {
   $line =~ s/\r\n$/\n/;
}

または、UNIXおよび/またはDOSスタイルの行末を削除するには:

for ($line in <FILEHANDLE>) {
   $line =~ s/\r?\n$//;
}
于 2009-03-16T14:51:33.627 に答える
1

これが私の問題を解決したものです。^M はキャリッジ リターンであり、Perl スクリプトでは簡単に回避できます。

while(<INPUTFILE>)
{
     chomp;
     chop($_) if ($_ =~ m/\r$/);
}
于 2016-03-17T06:57:53.787 に答える
-1

インビヒット:

それからs/Control-VControl-M//g

Control-V Control-M明らかにそれらのキーです。それを綴らないでください。

于 2009-03-16T17:45:19.933 に答える