我有文本行,都具有相同的结构,并希望在所有行上排列2个元素:
1257654 some text (which may be long) #Foo
1543098 some other text #Barbar
1238769 whatever #Baz
2456874 something else #Quux
Run Code Online (Sandbox Code Playgroud)
我想获得:
#Foo some text (which may be long) 1257654
#Barbar some other text 1543098
#Baz whatever 1238769
#Quux something else 2456874
Run Code Online (Sandbox Code Playgroud)
这是我被困的地方:
:%s/\(\d\{7\}\)\(#.\{-}\)/\2\1/
Run Code Online (Sandbox Code Playgroud)
我哪里做错了 ?
替换的问题是你只有两组而不是三组.
你的目标是交换1和3周围2:
(1)(2)(3) --> (3)(2)(1)
Run Code Online (Sandbox Code Playgroud)
所以你需要在你的模式中有三个组:
(1543098)( some other text )(#Barbar)
Run Code Online (Sandbox Code Playgroud)
能够做到:
(#Barbar)( some other text )(1543098)
Run Code Online (Sandbox Code Playgroud)
这种替换似乎有效:
:s/^\(\d\{7\}\)\(.*\)\(#\w*\)/\3\2\1
Run Code Online (Sandbox Code Playgroud)
这是一个更短更漂亮的版本,这要归功于verymagic:
:s/\v^(\d{7})(.*)(#\w*)/\3\2\1`
Run Code Online (Sandbox Code Playgroud)