Удалить последнюю строку из всех файлов с определенным расширением - PullRequest
1 голос
/ 31 октября 2019

У меня есть несколько файлов с одинаковым расширением .txt в каталоге. Я хочу удалить последнюю строку из всех .txt файлов.

То, что я сделал, это

find . -type f -name '*.txt' -exec sed '$d' {} \;

Это печатает желаемый вывод из sed к терминалу для каждого .txt файла.

Я хочу изменить соответствующие файлы.

Ответы [ 3 ]

2 голосов
/ 01 ноября 2019

Попробуйте: -

sed  -i '$d' *.txt

"$" используется в качестве номера строки и означает последнюю строку в файле.

"d" используется для удаления соответствующейстрока (последняя строка в данном случае).

"*. txt" используется для выбора всех файлов с расширением .txt в данном каталоге.

1 голос
/ 31 октября 2019

Вы должны использовать -i с оператором sed

Чтобы изменить и внести некоторые изменения в файл, нам нужно указать -i в команде sed

Ваша команда должна выглядеть как

find . -type f -name '*.txt' -exec sed -i '$d' {} \;

Но учтите, что он обновит все файлы с расширением .txt, и вы не сможете вернуться обратно, поэтому сделайте резервную копию важных файлов

0 голосов
/ 06 ноября 2019

Учитывая риск потери данных при изменении большого количества файлов с использованием sed (как указано @WilliamPursell), это то, что я использовал после создания нового подкаталога:

awk 'NR>1 {print last > "./modified/"FILENAME} {last=$0}' *.txt

Это фильтрует все файлы с расширением .txt в новые файлы с изменениями в подкаталог с именем updated .

Также смотрите ответ @WilliamPursell на следующий вопрос.

Какой самый простой способ удалить первую и последнюю строку из файла с помощью awk?

...