-1

次のコードを使用して、dos2unixの行末を置き換えています。コードを実行するたびに、コマンドプロンプトでスタックします。以下のコマンドの何が問題になっていますか?

for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do    sed -i 's/\r//' $i ; done
4

2 に答える 2

2

Ubuntu では、dos2unixとがそれぞれおよびunix2dosとして実装されています。それらはパッケージで入手できます。todosfrodostofrodos

使用することをお勧めします

find . -type f \( -name "*.c" -o -name "*.h" \) -print0 | xargs -0 frodos
于 2013-01-20T02:46:59.893 に答える
0

find コマンドと for ループが正しく機能することを確認することをお勧めします。

これは、echo ステートメントを使用して各ファイルの名前を出力するだけで実行できます。

プラットフォーム (および.cファイルと.hファイルの数) によっては、findからの出力を直接操作する代わりに、xargsを使用する必要がある場合があります。どのプラットフォームを使用しているかをまだ教えていただけないため、なんとも言えません。

また、プラットフォームによっては、sedのバージョンが異なると-iオプションの動作も異なります。

バックアップ ファイルに使用するファイル拡張子を指定する必要がある場合と、指定する必要がない場合があります

上記のすべてが、コマンドを 1 つずつテストすることをお勧めする理由です。

使用しようとしているシステムで使用しようとしている各コマンドのマニュアル ページを読む必要があります。

コマンドのsed部分に関しては、単一のファイルでテストして、機能することを確認する必要があります。

次の sed コマンドを使用して、改行を修正できます。

sed 's/^M$//' input.txt > output.txt

^Mを入力して入力できますCTRLv CTRLm

前に言ったように、この-iオプションはプラットフォームによって動作が異なります。

それが機能しない場合は、sed で新しいファイルを出力し、後で元のファイルを上書きすることができます。

これは、 for ループ内で行うのは非常に簡単です。

于 2013-01-20T02:25:52.777 に答える