11

私のファイルの多くにはDOS行末があることがわかりました。VIでは、「^M」のようになります。これらのDOS行末がないファイルを変更したくありません。bashスクリプトを使用してこれを行うにはどうすればよいですか?ありがとう!

EV

4

8 に答える 8

19
grep -URl ^M . | xargs fromdos

grepは、現在のディレクトリの下にあるDOS行末のすべてのファイルのリストを取得します。

-Ugrepに、デフォルトで行末を削除するのではなく、行末を考慮させる

-R再帰的にします

-l一致する行ではなく、ファイル名のみをリストします

次に、そのリストをコンバーターコマンド(私が出身fromdosのubuntuにあります)にパイプします。dos2unix

注:実際には入力しないでください^M。代わりに、<Ctrl-V>次にを押し<Ctrl-M>て文字を挿入し、^Mgrepに目的を理解させる必要があります。または、$'\r'代わりに入力することもできます^M(ただし、bashでのみ機能する可能性があると思います...)。

于 2012-09-20T21:40:58.353 に答える
5

使用する1つの方法GNU coreutils

< file.txt tr -d '\r'
于 2012-09-21T01:34:25.543 に答える
4

ubuntuでは、fromdosユーティリティを使用します

fromdos test.txt

上記の例では、MS-DOSまたはMicrosoft Windowsファイル、または行区切り文字が異なるその他のファイルを取得し、LinuxおよびUnixで読み取るために新しい行区切り記号でファイルをフォーマットします。

于 2012-09-20T09:43:58.593 に答える
1

多くのオプションがあります..これらのいずれかで試すことができます..http://www.theunixschool.com/2011/03/different-ways-to-delete-m-character-in.html

于 2012-09-20T08:43:07.193 に答える
1
cat origin_file.txt | sed "s/^M//" > dest_file.txt

その文字を取得するには、上記と同じことを実行する必要があります。ctl-V、次にctl-Mです。これは、多くのプラットフォーム間で移植可能であり、bash内でシンプルに保つことができるため、私にとっては好ましいことです。

ubuntuで私もこの作品を見つけます:

cat origin_file.txt | sed "s / \ r //"> dest_file.txt

于 2021-01-15T23:46:19.973 に答える
0

次のコマンドを使用できます。

   dos2ux file.in>file.out or:

perlで:

perl -pi -e 's/\r//g' your_file

または、次のことを行うことができます。

  • viで開く
  • コマンドモードに移動します
  • タイプ:%s/[ctrl-V][CTRL-M]//g
于 2012-09-20T08:39:45.843 に答える
0

マルチバイトファイルを変換する場合は、特別な注意が必要であり、おそらく正しいiconvを使用するか、エンコード仕様から再コード化する必要があることに注意してください。

プレーンASCIIファイルの場合、以下の両方の方法が機能します。

このflipプログラムは、Debianではパッケージとも呼ばれflip、行末を処理できます。マニュアルから:

When asked to convert a file to the same format that  it already 
has, flip  causes  no change to the file. Thus to convert all
files to **IX format you can type

flip -u *

and all files will end up right, regardless of whether they were 
in MS-DOS or in **IX format to begin with. This also works in the
opposite direction.

または、GNUrecodeを使用することもできます。

< /etc/passwd recode ..pc | tee a b > /dev/null
file a b

出力:

a: ASCII text, with CRLF line terminators
b: ASCII text, with CRLF line terminators

UNIXの行末に変換します。

recode pc.. a b
file a b

出力:

a: ASCII text
b: ASCII text

recodeはpc、dosの行末をとして省略します。したがって、ロジックpc..は次のようになります。pc形式からデフォルトのlatin1に変換し、UNIXの行末を指定します。

于 2012-09-20T09:04:24.947 に答える
0

ファイルの末尾でフィルタリングする必要がある場合の勝者の回答の変更

grep -URl ^M . | grep .php | xargs dos2unix

fromdosの代わりにdos2unixを使用しましたが、効果は同じであるはずです。

于 2016-02-05T17:28:54.413 に答える