Что лучше между циклом for и циклом while для оболочки Korn

Что лучше между циклом for и циклом while для оболочки Korn

У меня есть файл 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 /./' --

Связанный контент