2

私は perl と regex の経験がほとんどなく、次の質問に対する答えを見つけることができませんでした。

パターン「パッケージ」を見つけて、見つかったパターンの上にコマンドを挿入する次のコマンドがあります。

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 /

上記の perl コマンドを実行すると、次のようになります。

/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 /

私が欲しいのは、 -package の後の単一引用符内の部分だけが見つかった行の上に書かれていることです。これは可能ですか?

4

1 に答える 1

2

正規表現を使用して、一重引用符の間の部分を抽出します。

perl -i~ -pe"/package '(.*?)'/ and print qq{/usr/bin/BigHonkingText \$1\n}" script.sh
于 2013-11-13T10:00:49.590 に答える