1

この文字列を一致させようとしています

'12.34.5.6',#### OR
'12.34.5.6', #### (Note the space after the comma) 

一連のファイルで #### を 2222 に置き換えます。

私は小さく始めましたが、このコマンドは 1234 を 2222 に正常に変更しました

sed -i 's/'12.34.5.6\''\,1234/'12.34.5.6\''\, 2222/g' file.txt

そのため、1234 を正規表現に置き換える作業に移りました。以下は、私が試したが機能しないコマンドの一部です。

sed -i 's/'12.34.5.6\''\,\(\s?[0-9]{4,5}\)/'12.34.5.6\''\, 2222/g' file.txt
sed -i 's/'12.34.5.6\''\,[0-9][0-9][0-9][0-9][0-9]?/'12.34.5.6\''\, 2222/g' file.txt

誰かがこれについて私を助けてくれますか、それともいくつかの指針を与えることができますか?

4

2 に答える 2

0

これはトリックを行うかもしれません:

sed -E "s/('12.34.5.6',\s?)[0-9]{4,5}/\12222/g"

例:

$ echo "'12.34.5.6', 2134" | sed -E "s/('12.34.5.6',\s?)[0-9]{4,5}/\12222/g"
'12.34.5.6', 2222
$ echo "'12.34.5.6',9230" | sed -E "s/('12.34.5.6',\s?)[0-9]{4,5}/\12222/g"
'12.34.5.6',2222

説明:

拡張正規表現を使用するように-E求めた場合(ただし、これは主に好みの問題です)、正規表現の開始はかなり単純です:この同じ文字列に一致するだけです。次に、オプションであることを示すためにスペースを追加し、その後に a を追加します。この最初の部分は、置換パターンで使用できるように中かっこで囲まれています。sed'12.34.5.6',?

次に、パターンに を追加し#ます。#と を使用した試みに基づいて、数字の代わりにを使用した[0-9]{4,5}と想定しまし[0-9][0-9][0-9][0-9][0-9]た。

最後に、置換パターンでは、以前に一致した最初の中かっこのペアを で使用し、's:\1を追加します(数字 ( 's) は、中かっこで囲まれていないためにプロセスで破棄されます) を置き換えます)。2\12222#

PS。次回は、読みやすくするために質問をフォーマットしてください。PPS。ここでの本当の問題は正規表現ではなく、正規表現での引用符のエスケープだと思います。[この質問]を見てください。

于 2012-11-20T01:18:05.113 に答える
0
sed -r "s/('12[.]34[.]5[.]6',[ ]?)[0-9]{4}/\\12222/g"
于 2012-11-20T01:31:28.140 に答える