処理するファイル名のリストを含むファイル 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 /./' --