Замена содержимого в файле с помощью sed или PERL

Необходимо добавить дополнительный уровень цитирования:

ssh -l root ${host} "rpm -q --qf '<prm><N>%{N}</N></rpm>' --all"

Без дополнительных двойных кавычек команда, переданная удаленной оболочке, будет

rpm -q --qf <prm><N>%{N}</N></rpm> --all

и оболочка интерпретирует <и т. д.

В сообщении об ошибке обратная кавычка и одинарная кавычка являются фактическими кавычками, используемыми для цитирования команды. Они не являются частью команды, данной оболочке.

1
15.10.2019, 12:53
1 ответ

Немного изменим вашу команду:

$ perl -pe 's#(url\()(\\['\''"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g' foo
url(\'/prefix/font-awesome.woff\') url(\'/prefix/bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')

Регулярное выражение, которое я заключил в одинарные кавычки, так как преимущества использования \'и \"перевешиваются всеми необходимыми дополнительными экранированием,:

s#(url\()(\\['"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g
   _____  ______  __________________ 
    $1     $2 \2         $3
    url(   \'        ...\')
           \"        ...\")

.*?ленив, и при замене группы упоминаются с помощью $1, $2и т. д. (в отличие от шаблона, где это \1, \2и т. д. ).

1
27.01.2020, 23:40

Теги

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