У меня есть рабочая команда grep, которая работает в командной строке, но не внутри моего сценария perl - PullRequest
0 голосов
/ 26 ноября 2018

Я думаю, что это возможно из-за побега персонажей.Кроме того, скрипт и файл, к которому осуществляется доступ (input.scs), находятся в одном каталоге.

my @var=`grep -o '"[^"]\+"' ./input.scs | sed 's/"//g'`;
print "-D @var\n";

Выходные данные возвращаются пустыми, когда на самом деле должно генерироваться несколько строк.Команда grep ищет данные в кавычках и печатает их.

1 Ответ

0 голосов
/ 26 ноября 2018

Как прокомментировал @ikegami, вам необходимо выделить обратную косую черту внутри оператора backtick, иначе Perl попытается его интерполировать:

my @var = `grep -o '"[^"]\\+"' input.scs | sed 's/"//g'`;

Однако вместо использования внешних команд вы можете сделать это с помощьюPerl on-liner вроде:

perl -ne 'print "$1\n" while (m/"([^"]+)"/g)' input.scs

Это вернет тот же вывод, то есть список всех совпадений, с удаленными двойными кавычками.

Или, если вы хотите редактировать файл вместо:

perl -pe 's/"([^"]+)"/$1/g' input.scs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...