2013-02-04 43 views
0

我有一个名为test.csv,内容如下文件:GNU sed的:全局替换失败

T1,T2,T3,T4 
10,2,3,17 
10,2,5,14 
10,2,2,16 
15,1,17,15 
12,1,9,25 

我想对25的第四列替换所有的值17所以,我想下面的命令:

cat test.csv | sed -r 's/(([1-9]+,){3})17/\125/g' 
T1,T2,T3,T4 
10,2,3,17 
10,2,5,14 
10,2,2,16 
15,1,17,15 
12,1,9,25 

正如你所看到的,只有最后一行被修改,但不是第二行。

但是,如果我这样做:cat test.csv | sed -r "s/([0-9]+,[0-9]+,[0-9]+,)17/\125/"我有我想要的输出。这是为什么?

回答

1

您的sed线没有工作的原因是:

如果你仔细检查你的sed线,

cat test.csv | sed -r 's/(([1-9]+,){3})17/\125/g' (your sed line) 

你有[1-9][0-9],修复,然后再试一次,它应该工作您。

也不要求cat file。你可以做sed '...' file

+0

是的,确切的!谢谢肯特,多么错误...... :) – Kaeros