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ファイルのリストが含まれており、そのファイルの内容を編集する必要がある場合、ファイルごとに 1 つの編集コマンドを実行する場合を除き、ループは理想的ではありません。

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

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

関連情報