mol*_*lok 3 regex grouping backreference sed
我有一个像这样的文本文件:
FOO BAR PIPPO PLUTO 31337 1010
FOOZ BAZ 130
VERY LONG LINE LIKE THIS THEN A NUMBER LIKE 42
Run Code Online (Sandbox Code Playgroud)
我需要把它变成:
FOO-BAR-PIPPO-PLUTO 31337 1010
FOOZ-BAZ 130
VERY-LONG-LINE-LIKE-THIS-THEN-A-NUMBER-LIKE 42
Run Code Online (Sandbox Code Playgroud)
我能做的最好的事情是:
sed -re 's/([A-Z]+)( )([A-Z]+)/\1-\3/g'
Run Code Online (Sandbox Code Playgroud)
但输出是
FOO-BAR PIPPO-PLUTO 31337 1010
FOOZ-BAZ 130
VERY-LONG LINE-LIKE THIS-THEN A-NUMBER LIKE 42
Run Code Online (Sandbox Code Playgroud)
接近,但没有雪茄。知道为什么我的正则表达式不起作用吗?
你不能有重叠的匹配。未检测到“BAR PIPPO”,因为在匹配“FOO BAR”时“BAR”已被消耗。
FOO BAR PIPPO PLUTO 31337 1010
------- ===========
1 2
Run Code Online (Sandbox Code Playgroud)
试试这个:
$ sed -re 's/ ([A-Z])/-\1/g'
Run Code Online (Sandbox Code Playgroud)
请注意,这没有重叠的匹配:
FOO BAR PIPPO PLUTO 31337 1010
-- == --
1 2 3
Run Code Online (Sandbox Code Playgroud)