使用 sed 更改字符位置

使用 sed 更改字符位置

该文件包含:

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/'

相关内容