替换字符串中的数字

时间:2012-11-20 01:06:15

标签: regex

我正在尝试匹配此字符串

'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

有人可以帮我解决这个问题或给出一些指示吗?

2 个答案:

答案 0 :(得分: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我们要求sed使用extended regex(但这主要是品味问题),正则表达式的开头很简单:'12.34.5.6',只是匹配这个字符串相同。然后我们添加一个空格,然后是?以表示它是optionnal。第一部分用括号括起来,以便能够在替换模式中使用它。

然后,我们将#添加到模式中。我假设您根据#[0-9]{4,5}的尝试使用[0-9][0-9][0-9][0-9][0-9]代替数字。

最后,在替换模式中,我们使用先前匹配的第一对大括号\1,并添加我们的2\12222(将替换数字{{{ 1}}'s),在过程中被丢弃,因为没有括在括号中。)

PS。下次请format your question以获得更好的可读性。 PPS。我认为这里的真正问题不是正则表达式,而是在你的正则表达式中逃脱的引用。也许看看[这个问题]。

答案 1 :(得分:0)

sed -r "s/('12[.]34[.]5[.]6',[ ]?)[0-9]{4}/\\12222/g"