2

ファイルに対して sed ステートメントを実行するのに助けが必要ですが、私が持っているものが機能しない理由を理解できないようです。私は徹底的に検索しましたが、それぞれの結果に似たような結果が得られましたが、期待した結果が得られない理由がわかりません。

次のようないくつかのリストを含むファイルがあります

192.168.10.23:7020
192.168.10.23:4520
192.168.10.23:3320

など、基本的には 192.168.10.23:XX20 を 192.168.10.23:XX21 に置き換える必要があります。

とりわけ、私は試みました:

sed 's/\:\([0-9]\)\{2\}20/\:&21/g' $file

次のような結果が得られます。

192.168.10.23:702021
192.168.10.23:452021
192.168.10.23:332021

また:

sed 's/\:\([0-9]\)\{2\}/\:&21/g'

次のような結果が得られます。

192.168.10.23:702120
192.168.10.23:452120
192.168.10.23:332120

他の試みでは、まったく変化がないか、まったく異なる結果が得られます。私はとても近くにいるように感じますが、まだ遠いです。どんな助けでも大歓迎です!

4

2 に答える 2

2

なぜあなたはできないのですか?

sed 's/20$/21/'

ただし、元のソリューションの精神で可能です:

sed 's/\(:[0-9]*\)20/\121/'

の代わりに、括弧に一致する部分のみを繰り返す を&使用します。\1

于 2013-03-05T20:31:18.360 に答える
1

これはうまくいくはずです:

sed 's/:\([0-9]\{0,3\}\)20/:\121/g' $file

また、ポート番号は 2 桁から 5 桁のポート番号になると想定しています。

例: http://regexr.com?340vk

于 2013-03-05T20:38:33.080 に答える