Необходимо добавить дополнительный уровень цитирования:
ssh -l root ${host} "rpm -q --qf '<prm><N>%{N}</N></rpm>' --all"
Без дополнительных двойных кавычек команда, переданная удаленной оболочке, будет
rpm -q --qf <prm><N>%{N}</N></rpm> --all
и оболочка интерпретирует <
и т. д.
В сообщении об ошибке обратная кавычка и одинарная кавычка являются фактическими кавычками, используемыми для цитирования команды. Они не являются частью команды, данной оболочке.
Немного изменим вашу команду:
$ 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
и т. д. ).