perlの-pオプションでsedモードで使っています。

正規表現の置換で後方参照を使った時に、数字が続くと異なる文字に変換されて困っています。

以下のようなテキストファイルを
123456789
abcdefghi

以下のコマンドで処理すると
perl -pe 's/(123)/\1456/' sed.txt

出力結果が以下のようになります。
e6456789
abcdefghi

123の部分が後方参照と合わさって、e6と変換されます。

欲しい結果は以下です。
456456789
abcdefghi

どうすれば欲しい結果になるでしょうか。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2008/02/22 17:07:05
  • 終了:2008/02/22 21:35:50

ベストアンサー

id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/02/22 19:43:01

ポイント100pt

正規表現 [Perl講座 -Smart]

perl -pe 's/(123)/${1}456/'

こんな感じで。

id:fjkktkys

ありがとうございます。

2008/02/22 21:35:23

その他の回答(2件)

id:syounan No.1

syounan回答回数48ベストアンサー獲得回数12008/02/22 17:17:21

ポイント27pt

http://google.com/

URLはダミーです。

当方のlinux環境で検証してみましが、やはり

perl -pe 's/(123)/\1456/' sed.txt

だと、fjkktkysさんの仰るような結果になりました。

ちなみに、

perl -pe 's/123/456/' sed.txt

でやると、fjkktkysさんの想定されている結果が出るようですので、

お試しになっては如何でしょうか?

id:fjkktkys

すみません説明不足でしたね。

要は、後方参照の後に数字を使いたいということです。

例があまりよくなくて申し訳ないです。

perl -pe 's/^(\w+)/\1456/' sed.txt

とかやりたいということです。

2008/02/22 17:59:15
id:syounan No.2

syounan回答回数48ベストアンサー獲得回数12008/02/22 18:20:34

ポイント27pt

後方参照の後に数字を追加して表示させたいのであれば、

後方参照の後の数字をASCIIコードで表記してみるのは如何でしょうか?

perl -pe 's/(123)/\1\x34\x35\x36/' sed.txt

\x34\x35\x36はそれぞれ数字の4~6に該当します。

アスキーコードについては↓をご参照ください。

http://chaichan.web.infoseek.co.jp/src/moji.htm

id:fjkktkys

アスキーコードとかその辺が影響してる予感はしたのですが、ちょいとこの方法だと覚えれないですね。

2008/02/22 21:35:15
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/02/22 19:43:01ここでベストアンサー

ポイント100pt

正規表現 [Perl講座 -Smart]

perl -pe 's/(123)/${1}456/'

こんな感じで。

id:fjkktkys

ありがとうございます。

2008/02/22 21:35:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません