Итак, допустим, у меня есть строки:
aaa -Dprop=var Class arg
aaa Class arg
Я хочу одну однострочную строку (perl, sed, awk, не имеет значения), которая может извлекать arg
и var
(если его там).В частности, я хотел бы вернуть
arg var
arg
Для первого из них работает следующее:
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*(-Dprop=([a-z]*)).*Class (.*)|\3 \2|'
, но поскольку требуется -Dprop=
, очевидно, что второе не работаетодин.
Если, однако, я сделаю это совпадение необязательным:
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*(-Dprop=([a-z]*))?.*?Class (.*)|\3 \2|'
оно не будет работать для первого, потому что, я считаю, что эти два. * Являются жадными классификаторами и соответствием -Dpropfirst.
Если я сделаю их нежадными, это все равно не сработает, но я не уверен почему.
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*?(-Dprop=([a-z]*))?.*?Class (.*)|\3 \2|'
Итак, во-первых, какое регулярное выражение я могу использоватьсоответствует правильно?(Я знаю, что могу разделить его на несколько команд, но у меня есть только одна).