【发布时间】:2011-12-06 05:04:42
【问题描述】:
所以,假设我有字符串:
aaa -Dprop=var Class arg
aaa Class arg
我想要一个可以提取arg 和var(如果有的话)的单行(perl、sed、awk,没关系)。具体来说,我想返回
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|'
它不适用于第一个,因为我相信这两个 .*s 是贪婪的限定符并且首先匹配 -Dprop。
如果我让它们不贪婪,它仍然不起作用,但我不确定为什么。
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*?(-Dprop=([a-z]*))?.*?Class (.*)|\3 \2|'
那么,首先,我可以使用什么正则表达式来正确匹配? (我知道我可以将它分成多个命令,但我宁愿只有一个)。
【问题讨论】:
-
+1 哇,有人在发布之前实际上已经尝试过编写一些代码! ;-) 祝你好运。
-
"-Dprop=" 是固定的还是可以是任何 "foo=yourVar"?
-
@Kent,-Dprop 是固定的,var 可以是任何东西(但是是特定格式)