Как удалить все строки, соответствующие шаблону, из набора файлов?

У меня есть раздражающий инструмент с закрытым исходным кодом, который записывает определенную информацию в файл конфигурации. Если вы затем попытаетесь использовать конфигурацию в другом файле, тогда он загружает старый файл. Хмм...

К счастью, файлы конфигурации являются текстовыми, поэтому я могу управлять версиями, и получается, что если вы удаляете только оскорбительную строку из файла, никакого вреда не будет.

Но инструмент продолжает помещать строки обратно. Поэтому каждый раз, когда я хочу проверять новые версии файлов конфигурации, мне нужно удалить все строки, содержащие символ openDirFile.

Я собираюсь создать какую-то команду bash для запуска grep -v в каждом файле, сохранить результат во временном файле, а затем удалить оригинал и переименовать временное, но я подумал, знает ли кто-нибудь о хорошее чистое решение, или уже придумал и отладил аналогичный вызов.

Для дополнительного кредита, как это можно сделать, не уничтожая символическую ссылку в том же каталоге (favourite.rc- > signals.rc)?

Ответы

Ответ 1

sed -i '/openDirFile/d' *.conf

это делает удаление всех файлов conf

вы также можете комбинировать строку с командой "find", если ваши файлы conf находятся на разных путях.

Обратите внимание, что -i выполнит удаление "на месте".

Ответ 2

Это была bash -спепелка, с которой я столкнулся:

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done

Ответ Кента явно выше.