我正在尝试交换单词和数字之间出现的单词: 我的文件很大,行按此顺序排列,但数字不同,但是单词“ WORD,AGAIN,PIC”不变。
23 TWO-ONE2 WORD 5 AGAIN CIP D(89). 1234541120
我想要的输出应该是:
23 TWO-ONE2 CIP D(89) WORD 5 AGAIN. 1234541120
CIP“ D(89)”附近的值可以更改为F7(934)或类似的值,但是它始终是()中的数字。
我尝试了命令:
sed -r 's/(WORD[0-9]+) (AGAIN+) (CIP[A-Z][0-9]([A-Z][0-9])+)/\3 \1 \2/'
sed -E 's/^(WORD.+AGAIN).+(CIP \+)/\2 \1/'
我将不胜感激!
答案 0 :(得分:1)
您可以使用基于POSIX ERE的sed
:
sed -E 's/(WORD.*AGAIN)([^[:alnum:]]+)(CIP[^(]*\([0-9]+\))/\3\2\1/g' file > newfile
请参见regex demo
详细信息
(WORD.*AGAIN)
-组1(\1
):WORD
,任意0个以上的字符,AGAIN
([^[:alnum:]]+)
-第2组(\2
):除字母数字字符外的一个或多个字符(CIP[^(]*\([0-9]+\))
-第3组(\3
):CIP
,除了(
,(
以外的0个或更多字符,1个以上的数字,然后是{{ 1}}。