これは、後方参照のためのものです。キャプチャしたいテキストのセクションをカッコで囲むだけです。最初の括弧は$ 1で、二番目の括弧は$ 2で、などとなります。 5.10で
s/(\s[0-9]\s[0-9]{3})/$1I/
あなたは<
と>
挟ん
s/(?<bodytext>\s[0-9]\s[0-9]{3})/$+{bodytext}I/
ものは名前であると言うことができますので、私たちは、named capturesを得ました。名前は%+
変数のキーになり、値はキャプチャされたテキストです。
別の解決策は、あなたがDOUBを使用している場合
perl -pi -e 's/(\s[0-9]\s[0-9][0-9][0-9])/$1I/' filename
を試してみてください\K
s/\s[0-9]\s[0-9]{3}\K/I/
速記、5.10に新しい、zero-width positive look-behinds
s/(?<=\s[0-9]\s[0-9]{3})/I/
またはそのを使用することですPerlがそれを見る前に$ 1がシェルによって補間されています。あなたがうまくいくと思われるものに問題がある場合は、Perlが見ているものを見てみることをお勧めします。これを行うにはB::Deparse:
これは次の出力を生成します。
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
s/(\s[0-9]\s[0-9][0-9][0-9])/I/;
}
continue {
print $_;
}
-e syntax OK
これより、$1
が見つからないことがわかります。単一引用符で再び試すことができます:
perl -MO=Deparse -pi -e 's/(\s[0-9]\s[0-9][0-9][0-9])/$1I/' filename
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
s/(\s[0-9]\s[0-9][0-9][0-9])/$1I/;
}
continue {
print $_;
}
-e syntax OK
、一度に脱出して:
perl -MO=Deparse -pi -e "s/(\s[0-9]\s[0-9][0-9][0-9])/\$1I/" filename
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
s/(\s[0-9]\s[0-9][0-9][0-9])/$1I/;
}
continue {
print $_;
}
-e syntax OK
ですまだ全部私と交換しています:( –
括弧を追加しましたか? –
これは私の完全なコマンドです。perl -pi -e "s /(\ s [0-9] \ s [0-9] [0-9] [0-9])/ $ 1I /" testFile.phy –