Это можно сделать с помощью файловых ACL.
Вы запрещаете пользователю badguy
создавать файлы в tmp
с помощью:
setfacl -m u:badguy:r-x /tmp
А можно разрешить ему писать в каталог hello
«обычно» (разрешить всем, chown
в каталогbadguy
)или, опять же, с файлом ACLS:
setfacl -m u:badguy:rwx /tmp/hello
Кажется, это то, в чем действительно хорош awk вместо sed:
cat file | awk 'BEGIN {lastLINE="XXX";} \
{ if ( lastLINE ~ /element1/ ) gsub(/BADtextREGexpression/,"replaceTEXT") ; printf("%s\n",$0); lastLINE = $0; }'
Если ошибок нет, вышеописанное выведет все строки без изменений, если только в последней строке не было фрагмента, совпадающего с регулярным выражением «element1». В этом случае он сделает глобальную замену "replaceTEXT" в текущей строке (вместо BADtextREGexpression )перед печатью.
$0 — это переменная, представляющая текущую целую строку, только что прочитанную из входного файла, и является целью gsub ()по умолчанию.
Я не знаю, как это сделать, если 'sed' абсолютно необходим.
Ссылка на онлайн-руководство по awk:https://www.gnu.org/software/gawk/manual/gawk.html