Kornシェルのforループとwhileループのどちらが良いですか?

Kornシェルのforループとwhileループのどちらが良いですか?

処理するファイル名のリストを含むfile_list.txtファイルがあります。 file_list.txtのすべてのファイルに対して末尾のスペースと余分な改行を削除する必要があります。どうすればいいですか? whileループまたはforループを使用する方が良いですか?

答え1

編集に関するものであればfile_list.txtシェルループではなくテキスト編集ツールを使用します。、よい:

sed 's/[[:space:]]*$//; # remove trailing whitespace
     /./!d; # remove empty lines' < file_list.txt > new_file_list.txt

またはその場で編集してください。

perl -nli.back -e 's/\s+$//;print if /./' file_list.txt

.back元のバックアップコピーが必要ない場合は削除してください。)

ファイルリストがあり、各ファイルに対して実際に編集コマンドを実行したい場合を除き、そのファイルの内容を編集したい場合でもfile_list.txt繰り返しは理想的ではありません。

内容がfile_list.txt入力形式と互換性がある場合、xargsつまりファイル名が空白(改行を含む)で区切られ、二重引用符、一重引用符、またはバックスラッシュが空白と互いにエスケープできる場合(すべての文字を許可)、次のことができますあります。

xargs < file_list.txt perl -nli.back -e 's/\s+$//;print if /./' --

関連情報