该文件包含:
dateutkfilename25012009
我想将第 16 到 17 个字符的位置更改为第 18 到 19 个字符。然后将第 16 个字符的位置更改为第 19 个字符,将第 20 个字符更改为第 23 个字符......所以它将是:
dateutkfilename20090125
我尝试使用下面的代码将第 16 个字符更改为第 17 个字符,将第 18 个字符更改为第 19 个字符,但我不明白为什么它不起作用:
'/dateutkfilename/s/\(.\{16\}\)\([0-9]\{2\}\)\(.*\)/\(.\{18\}\)\([0-9]\{2\}\)\(.*\)/g'
答案1
这是您问题的答案:
s/^\(.\{15\}\)\(.\{2\}\)\(.\{2\}\)\(.\{4}\)/\1\4\3\2/
但如果你可以锚定到最后,事情就会变得更简单:
s/\(.\{2\}\)\(.\{2\}\)\(.\{4\}\)$/\3\2\1/
就我个人而言,我可能也[0-9]
会这样做.
:
s/\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)$/\3\2\1/
像往常一样,有不止一种方法可以做到这一点。
答案2
$ sed -e 's/\(.\{15\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)/\1\4\3\2/g' /tmp/test.txt
似乎做了你所期待的事情。
答案3
sed '/\(dateukfilename\)\(..\)\(..\)\(....\)/s//\1\4\3\2/'