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