我具有1000行的文件,在每個第5行至8列由:
與正則表達式交換柱在vi不使用AWK,讀取,等等
1:2:3:4:5:6:7:8
4g10:8s:45:9u5b:a:z1
分離我想在一些所有行order 4:3:1:2:5:6:7...
我該如何僅用正則表達式交換前4列?
我具有1000行的文件,在每個第5行至8列由:
與正則表達式交換柱在vi不使用AWK,讀取,等等
1:2:3:4:5:6:7:8
4g10:8s:45:9u5b:a:z1
分離我想在一些所有行order 4:3:1:2:5:6:7...
我該如何僅用正則表達式交換前4列?
我想,這可能會更容易與其他的方法去做,但你可以使用ex
做到這一點,所以在命令行模式,輸入:
:%s/^\([^:]\+\):\([^:]\+\):\([^:]\+\):\([^:]\+\):/\4:\3:\1:\2:/
這將爲前4個冒號分隔的字段創建捕獲組,然後以不同於最初存在的順序替換它們。
@ondrej好抓,現在我在這裏修好了 –
這裏是一個正則表達式是應該做的,你在找什麼:
newtext = re.sub("([^:]+):([^:]+):([^:]+):([^:]+)(:)?(.*)?",r"\4:\3:\1:\2\5\6",text)
該帶走的是你要使用parans捕捉,然後按順序重新排列你希望他們在更換。每個捕捉「基團」是隻是一個或多個非:由分隔:如果存在空的組的可能性改變每個+到*
這裏是爲了清楚起見在Python樣品:
import re
textlist = [
"1:2:3:4:5:6:7:8",
"1:2:3:4:5",
"1:2:3:4",
]
for text in textlist:
newtext = re.sub("([^:]+):([^:]+):([^:]+):([^:]+)(:)?(.*)?",r"\4:\3:\1:\2\5\6",text)
print (newtext)
輸出:
4:3:1:2:5:6:7:8
4:3:1:2:5
4:3:1:2
不清楚,請在代碼標籤中添加更多示例Input_file和期望的輸出。 – RavinderSingh13