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