Имя пользователя в переменной:
username="kasper"
Удалить пользовательский раздел:
sed "/$username/{:a;N;/\n--- [^[:blank:]]* ---\$/{s/.*\n//;b};ba}" inputfile
или для некоторых версий sed
( отредактировано ):
sed -e "/$username/{" -e ':a' -e 'N' -e '/\n--- [^[:blank:]]* ---$/{s/.*\n//' -e 'b' -e '}' -e 'ba' -e '}' inputfile
Редактировать: возможный вариант для размещения начальных и конечных пробелов:
sed -e "/$username/{" -e ':a' -e 'N' -e '/\n[[:blank:]]*---[[:blank:]]*[^[:blank:]]*[[:blank:]]*---[[:blank:]]*$/{s/.*\n//' -e 'b' -e '}' -e 'ba' -e '}' inputfile
Добавить следующий раздел пользователя:
sed "s/--- end/--- $username ---\ndata data data data\ndata data data data\n&/"
или
sed "/--- end/i--- $username ---\ndatadata data data\ndata data data data\n"
Если ваша версия sed
поддерживает изменения на месте, вы можете сделать:
sed -i ...
В противном случае вам придется использовать временный файл:
sed ... inputfile > tmpfile && mv tmpfile inputfile
Лучше всего использовать утилиту типа mktemp
или tempfile
для создания временного файла и использовать предоставленное имя.