Regex 在perl中选择变量的一部分

Regex 在perl中选择变量的一部分,regex,perl,Regex,Perl,我在perl和regex方面的经验很少,我还没有找到我的问题的答案,即: 我使用此命令查找模式“package”,并在找到的模式上方插入一个命令: perl -i~ -p -e'/package/ and $_ = "/usr/bin/BigHonkingText $_\n$_"' script.sh script.sh如下所示: install -package 'Adobe Reader.pkg' -target / install -package 'Adobe Flash.pkg'

我在perl和regex方面的经验很少,我还没有找到我的问题的答案,即:

我使用此命令查找模式“package”,并在找到的模式上方插入一个命令:

perl -i~ -p -e'/package/ and $_ = "/usr/bin/BigHonkingText $_\n$_"' script.sh
script.sh如下所示:

install -package 'Adobe Reader.pkg' -target /

install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText install -package 'Adobe Reader.pkg' -target /
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingText install -package 'Adobe Flash.pkg' -target /
install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText Adobe Reader.pkg
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingTextAdobe Flash.pkg
install -package 'Adobe Flash.pkg' -target /
在我运行上面的perl命令之后,它看起来是这样的:

install -package 'Adobe Reader.pkg' -target /

install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText install -package 'Adobe Reader.pkg' -target /
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingText install -package 'Adobe Flash.pkg' -target /
install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText Adobe Reader.pkg
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingTextAdobe Flash.pkg
install -package 'Adobe Flash.pkg' -target /
但我希望它看起来像这样:

install -package 'Adobe Reader.pkg' -target /

install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText install -package 'Adobe Reader.pkg' -target /
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingText install -package 'Adobe Flash.pkg' -target /
install -package 'Adobe Flash.pkg' -target /
/usr/bin/BigHonkingText Adobe Reader.pkg
install -package 'Adobe Reader.pkg' -target /

/usr/bin/BigHonkingTextAdobe Flash.pkg
install -package 'Adobe Flash.pkg' -target /

我想要的是,只有单报价后包中的部分写在找到的行上方。这可能吗?

使用正则表达式提取单引号之间的部分:

perl -i~ -pe"/package '(.*?)'/ and print qq{/usr/bin/BigHonkingText \$1\n}" script.sh

虽然
”(.*)
几乎总是错误的,但在这种情况下它正好起作用。最好使用更安全的变体,如
'([^']*)'
'(.*?)
。哎呀,我确实有一个
,但在途中的某个地方丢失了它!谢谢你指出它@amon。