[英]Vim: Replace regular expression match on a line with another regular expression match from same line
嗨:我正在嘗試使用搜索/替換來“旋轉” vim中的某些值,但似乎卡住了。
考慮以下文件:
key1: value1, value2, value3, ... valueN\n
key2: valueA, valueB, valueC,...valueX\n
...
我正在嘗試轉換該行上的每個','和'key',然后再換行。
因此,輸出為:
value1:key1\n
value2:key1\n
value3:key1\n
...
valueN:key1\n
valueA:key2\n
valueB:key2\n
...
我不確定如何用第一個匹配項替換每次出現的正則表達式匹配項(在這種情況下為',')。
我試過了:
:%s/\(^.\{-}\): \(.\{-}\),/\2:\1\r
但這只會替換第一次出現的','。
如何為每行用\\ 1替換每次出現的','?
謝謝!
您試圖一次做太多事情,但是如果您堅持使用Vim可以做到:
:%s/\v\s*(\w+):\s*(.*)/\=substitute(submatch(2), '\v\s*%(,\s*|$)', ':' . submatch(1) . '\n', 'g')/
輸入:
key1: value1, value2, value3
key2: valueA, valueB, valueC
輸出:
value1:key1
value2:key1
value3:key1
valueA:key2
valueB:key2
valueC:key2
我想宏或vimscript是可行的,但是如果perl
解決方案適合您...
$ cat ip.txt
key1: value1, value2, value3, valueN
key2: valueA, valueB, valueC, valueX
$ perl -pe 's/^([^:]+):\s*(.*)/$2/; $k=$1; s/(value\w+),?\s*/$1:$k\n/g' ip.txt
value1:key1
value2:key1
value3:key1
valueN:key1
valueA:key2
valueB:key2
valueC:key2
valueX:key2
如果輸出符合預期,請將perl -pe
更改為perl -i -pe
進行就地編輯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.