LINUX.ORG.RU

История изменений

Исправление DRVTiny, (текущая версия) :

По-моему подход исходно не очень: зачем сначала выяснять, в каких файлах упоминается пользователь, а потом все совпадения из этих файлов удалять?

Я предлагаю так: считывать каждый файл в переменную целиком, делать копию этой переменной, заменять в копии переменной все «строки», в которых есть вхождения имени пользователя, сравнивать исходник и копию - если есть различия - записать копию обратно в файл.

Не факт, что это быстрее (возможно, даже медленнее в силу того, что grep работает на несколько порядков аналогичных конструкций BASH, а только считанный файл - будет уже закеширован), но по крайней мере это будет программа на BASH, а не на «grep с параметрами» :)

Кстати, попробовал сделать так:

shopt -s extglob
f=$(</etc/fstab)
echo "${f//*([^$'\n'])defaults*([^$'\n'])/FAULT}"

Оно подвесило мне BASH и сожрало 100% одного ядра.

Наверное, это всё-таки бага, а не фича?

Исходная версия DRVTiny, :

По-моему подход исходно не очень: зачем сначала выяснять, в каких файлах упоминается пользователь, а потом все совпадения из этих файлов удалять?

Я предлагаю так: считывать каждый файл в переменную целиком, делать копию этой переменной, заменять в копии переменной все «строки», в которых есть вхождения имени пользователя, сравнивать исходник и копию - если есть различия - записать копию обратно в файл.

Не факт, что это быстрее (возможно, даже медленнее в силу того, что grep работает на несколько порядков аналогичных конструкций BASH, а только считанный файл - будет уже закеширован), но по крайней мере это будет программа на BASH, а не на «grep с параметрами» :)