需要用Sed来改变模式的“第N”字

时间:2016-05-23 00:08:37

标签: bash sed

我很难拼凑sed语法来更改此字符串的最后一个数字字符:<FITID>1261703816 我有一个文件,其中有几个字段需要更改,但字符串的数字部分将始终不同。但是,数字字符的数量将始终相同(10)。基本上我只需要在包含数百个字段的文件上将<FITID>1261703816的最后一个字符更改为:<FITID>1261703817

1 个答案:

答案 0 :(得分:1)

此命令会将<FITID>后的第十位更改为7

sed -E 's/([<]FITID[>][[:digit:]]{9})[[:digit:]]/\17/g' file

例如:

$ cat file
words, words, <FITID>1261703816 and more words
$ sed -E 's/([<]FITID[>][[:digit:]]{9})[[:digit:]]/\17/g' file
words, words, <FITID>1261703817 and more words

这只需要一个替代命令。 [<]FITID[>]匹配<FITID>,我们将尖括号放在方括号中,因为有些seds会将它们视为特殊的。 [[:digit:]]{9}匹配九位数。我们使用[:digit:]代替0-9,因为它是unicode安全的。这些字符都放在父母(...)中,因此在替换文本中,我们可以将它们作为组\1引用。