Sed通配符替换

时间:2015-05-08 20:56:18

标签: replace sed wildcard

我不确定为什么我很难用这个,我有这个SQL文件:

insert into table_name values ('Danny:2:1429543183', 195621, 'My  Stuff', '', 'Fake', '', '', 0, 1429553870, 1429543183, 1429543183, 1429543183, 0, 1, 1, 0, 0, '', 0, 0, 0, 0, '', 0, 0, 0, '', '', 0, 0, '', 0, '', 0, 0, '', 0, 0, '', '', '', '', '', '', '', '', '', 0, 0, '', '', 'P', 195621, '', '', 0, 0, '', 0, 1429543183, 0, '', '', 0, '', '', 0, 0, '', '', 1);

我想将以142*开头的所有内容更改为新值。

sed 's:\(142.*).*\,/\1 93284209348\g' /tmp/1 --> Nope
sed "s/[, 142*,]/ 93284209348,/"g /tmp/1 --> Changes everything to 93284209348

我觉得我很头疼:)

2 个答案:

答案 0 :(得分:1)

这应该做:

sed 's/\([ :]\)142[0-9]*/\193284209348/g' file
insert into table_name values ('Danny:2:93284209348', 195621, 'My  Stuff', '', 'Fake', '', '', 0, 93284209348, 93284209348, 93284209348, 93284209348, 0, 1, 1, 0, 0, '', 0, 0, 0, 0, '', 0, 0, 0, '', '', 0, 0, '', 0, '', 0, 0, '', 0, 0, '', '', '', '', '', '', '', '', '', 0, 0, '', '', 'P', 195621, '', '', 0, 0, '', 0, 93284209348, 0, '', '', 0, '', '', 0, 0, '', '', 1);

编辑:已修复,以便第一个数字具有正确的开始:,其他使用空格。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed 's/\<142[0-9]*/93284209348/g' file