Как добавить текст и пустую строку в начале каждого файла в данном каталоге?

Как добавить новую строку в начале каждого файла в /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 задачи:

  1. Завершает каждый файл "Hello" и пустой строкой.
  2. Удаляет пробелы и символы табуляции в конце каждой строки.

Результаты отображаются на стандартном выходе.

Наконец, простое перенаправление создает .2 файлы из обработанного стандартного вывода.

Он работает с файлами с пробелами в их именах, потому что $f цитируется

Если вы не хотите сохранять исходные файлы, измените команду следующим образом:

for f in * ; do awk 'BEGIN {print "Hello\n";} {gsub("([ \t]+)$", ""); print $0; }' "$f" >"$f.2"; mv "$f.2" "$f"; done

Основным дополнением является команда перемещения, которая заменяет исходные файлы измененной версией.

Другие вопросы по тегам