我正在尝试匹配此字符串
'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
有人可以帮我解决这个问题或给出一些指示吗?
答案 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"