История изменений
Исправление DRVTiny, (текущая версия) :
По-моему подход исходно не очень: зачем сначала выяснять, в каких файлах упоминается пользователь, а потом все совпадения из этих файлов удалять?
Я предлагаю так: считывать каждый файл в переменную целиком, делать копию этой переменной, заменять в копии переменной все «строки», в которых есть вхождения имени пользователя, сравнивать исходник и копию - если есть различия - записать копию обратно в файл.
Не факт, что это быстрее (возможно, даже медленнее в силу того, что grep работает на несколько порядков аналогичных конструкций BASH, а только считанный файл - будет уже закеширован), но по крайней мере это будет программа на BASH, а не на «grep с параметрами» :)
Кстати, попробовал сделать так:
shopt -s extglob
f=$(</etc/fstab)
echo "${f//*([^$'\n'])defaults*([^$'\n'])/FAULT}"
Оно подвесило мне BASH и сожрало 100% одного ядра.
Наверное, это всё-таки бага, а не фича?
Исходная версия DRVTiny, :
По-моему подход исходно не очень: зачем сначала выяснять, в каких файлах упоминается пользователь, а потом все совпадения из этих файлов удалять?
Я предлагаю так: считывать каждый файл в переменную целиком, делать копию этой переменной, заменять в копии переменной все «строки», в которых есть вхождения имени пользователя, сравнивать исходник и копию - если есть различия - записать копию обратно в файл.
Не факт, что это быстрее (возможно, даже медленнее в силу того, что grep работает на несколько порядков аналогичных конструкций BASH, а только считанный файл - будет уже закеширован), но по крайней мере это будет программа на BASH, а не на «grep с параметрами» :)