我很难将 sed 语法拼凑在一起以更改此字符串的最后一个数字字符:<FITID>1261703816
我有一个文件,其中包含几个需要更改的字段,但字符串的数字部分将始终不同。 但是,数字字符的数量将始终相同 (10)。基本上,我只需要将 <FITID>1261703816
的最后一个字符更改为: <FITID>1261703817
包含数百个此类字段的文件。
此命令会将<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>
我们将尖括号放入方括号中,因为某些 sed 会将它们视为特殊。 [[:digit:]]{9}
匹配九位数字。 我们使用[:digit:]
代替0-9
,因为它是 unicode 安全的。 这些字符都放在 父(...)
,因此,在替换文本中,我们可以将它们作为组1
引用。