Мне удалось добиться того, что вам нужно, просто используя сценарий bash и sed вместе, вот так:
#!/bin/bash
for filename in $PWD/*.txt; do
sed -i '' '1 s/([^()]*)//g' $filename
done
Этот сценарий просто перебирает все файлы .txt
в $ PWD (текущий рабочий каталог, так что вы можете добавить этот скрипт в свой бен и запускать его где угодно), а затем выполнить команду
sed -ie '1 s/([^()]*)//g' $filename
для файла. Запустив команду с номером 1
, мы сообщаем, что sed должен работать только с первой строкой файла:)
Редактировать: Лучший ответ
Работает выше штраф в каталоге, где все содержащиеся объекты являются файлами, не включая каталоги; другими словами, вышеприведенное не выполняет рекурсивный поиск по каталогам.
Поэтому после некоторого исследования эта команда должна выполнить именно то, что задает вопрос:
find . -name "*.txt" -exec sed -i '' '1 s/([^()]*)//g' {} \;
I must повторяем и повторяем, что вы сначала проверяете это на резервной копии, чтобы проверить, работает ли она. В противном случае используйте ту же команду, что и выше, но измените '', чтобы контролировать создание резервных копий. Например,
find . -name "*.txt" -exec sed -i '.bkp' '1 s/([^()]*)//g' {} \;
Эта команда выполнит замену sed в исходном файле (сохраняя имя файла), но создаст файл резервной копии для каждого с добавленным .bkp
, например, test1.txt
становится test1.txt.bkp
. Это более безопасный вариант, но выберите наиболее подходящий для вас:)