使用sed

时间:2019-04-29 17:17:37

标签: shell sed scripting

我正在尝试交换单词和数字之间出现的单词: 我的文件很大,行按此顺序排列,但数字不同,但是单词“ 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/'

我将不胜感激!

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}}。