GNU sed:全局替换失败

时间:2013-02-04 22:42:14

标签: sed

我有一个名为test.csv的文件,其中包含以下内容:

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

我想将第四列的所有值17替换为25.所以我尝试了命令:

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 个答案:

答案 0 :(得分: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