2017-08-10 41 views
0

一個行內替換字符我有一個​​完整的像行的文件:與sed的

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命令來實現它?

回答

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

AWK的解決辦法是更適合這樣的情況:

awk '{ $5=substr($NF,length($NF)) }1' file 
0

創造性地使用反向引用的:

sed 's/^\(.\+\) X \(.\+\) \(...\)\(.\)$/\1 \4 \2 \3\4/' 
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 
+1

'-E'允許轉義括號。我喜歡嵌套的捕獲組。 +1。 – stevesliva