Условное многострочное изменение Sed

Это можно сделать с помощью файловых ACL.

Вы запрещаете пользователю badguyсоздавать файлы в tmpс помощью:

setfacl -m u:badguy:r-x /tmp

А можно разрешить ему писать в каталог hello«обычно» (разрешить всем, chownв каталогbadguy)или, опять же, с файлом ACLS:

setfacl -m u:badguy:rwx /tmp/hello
0
16.07.2020, 05:13
1 ответ

Кажется, это то, в чем действительно хорош 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

0
18.03.2021, 23:19

Теги

Похожие вопросы