Как добавить текст и пустую строку в начале каждого файла в данном каталоге?
Как добавить новую строку в начале каждого файла в /home/johnny, содержащего текст "Hello", за которым следует пустая строка? Кроме того, я должен удалить все бесполезные пробелы или вкладки в конце каждой строки (если строка содержит только пробелы или табуляции, они будут удалены, но строка должна быть сохранена).
1 ответ
Попробуйте следующее (началось в /home/johnny/
):
for f in * ; do awk 'BEGIN {print "Hello\n";} {gsub("([ \t]+)$", ""); print $0; }' "$f" >"$f.2"; done
Это создает .2
файлы в том же каталоге. Эти файлы содержат модификации.
for
оператор перечисляет все файлы в каталоге. Если вы хотите обрабатывать только текстовые файлы, вы можете использовать *.txt
вместо *
,
awk
выполняет 2 задачи:
- Завершает каждый файл "Hello" и пустой строкой.
- Удаляет пробелы и символы табуляции в конце каждой строки.
Результаты отображаются на стандартном выходе.
Наконец, простое перенаправление создает .2
файлы из обработанного стандартного вывода.
Он работает с файлами с пробелами в их именах, потому что $f
цитируется
Если вы не хотите сохранять исходные файлы, измените команду следующим образом:
for f in * ; do awk 'BEGIN {print "Hello\n";} {gsub("([ \t]+)$", ""); print $0; }' "$f" >"$f.2"; mv "$f.2" "$f"; done
Основным дополнением является команда перемещения, которая заменяет исходные файлы измененной версией.