将特定字符串替换为另一个字符串,除非它包含句点

时间:2016-04-13 17:35:41

标签: regex perl sed

我正在寻找使用perl0,0,0:17 1,0,0:17 0,1,0:17 0,0,1:17 1,0,1:17 执行此操作的方法。我的文件中填充了这样的字符串:

0,0,-1:17.12
1,0,-1:17.12
2,0,-1:17.12
0,1,-1:17.12
1,1,-1:17.12

我的文件也填充了这样的字符串:

17

我想将17.12的所有实例更改为17.12,但我不想将17.12.12的实例意外更改为{{1}}。< / p>

任何帮助?

3 个答案:

答案 0 :(得分:1)

使用GNU sed:

sed 's/:17$/:17.12/' file

更新

sed -r 's/:17([^.]|$)/:17.12/' file

如果您要“就地”修改文件,请使用sed的选项-i

请参阅:The Stack Overflow Regular Expressions FAQ

答案 1 :(得分:0)

一种方法是使用Perl否定前瞻声明(public static String strFormattedDate() { const String sstrDateFormat = "yyyyMM''MMM"; DateTime dtmLocalDate = DateTime.Now; return dtmLocalDate.ToString(sstrDateFormat); } ,有关详细信息,请参阅'perlre'手册页):

(?!pattern)

使用

perl -ple 's/\b17\b(?!\.12\b)/17.12/' file

更新文件。

这将在文件中的任何位置将“17”替换为“17 .12”,只要它后面没有“.12”即可。这个问题可能有些过分,但这项技术值得了解。

答案 2 :(得分:0)

假设17出现在一行的末尾,你可以在那里锚定你的模式:

s/17$/17.12/