我有一个充满以下行的文件:
ATOM 27576 OT2 TYR X 360 33.646 13.165 20.334 1.00 1.00 PROE
我想将其转换为:
ATOM 27576 OT2 TYR E 360 33.646 13.165 20.334 1.00 1.00 PROE
换句话说,将PRO
的最后一个字母放在X
所在的位置。 X
是文件中的常量,但PRO
后缀不同。是否可以使用单行sed命令实现它?
答案 0 :(得分:2)
只需使用捕获组:
<强> sed 's/TYR X \(.*\)PRO\(.*\)$/TYR \2 \1PRO\2/'
强>
$ echo "ATOM 27576 OT2 TYR X 360 33.646 13.165 20.334 1.00 1.00 PROE" | sed 's/TYR X \(.*\)PRO\(.*\)$/TYR \2 \1PRO\2/' ATOM 27576 OT2 TYR E 360 33.646 13.165 20.334 1.00 1.00 PROE
答案 1 :(得分:1)
awk 解决方案更适合此类情况:
awk '{ $5=substr($NF,length($NF)) }1' file
答案 2 :(得分:1)
您可以使用此sed:
sed -i '' -E 's/ X( .*PRO([A-Za-z]))/ \2\1/' file
ATOM 27576 OT2 TYR E 360 33.646 13.165 20.334 1.00 1.00 PROE
答案 3 :(得分:0)
反向引用的创造性使用:
sed 's/^\(.\+\) X \(.\+\) \(...\)\(.\)$/\1 \4 \2 \3\4/'