gpt4 book ai didi

linux - 如何仅交换每行中的数值

转载 作者:太空狗 更新时间:2023-10-29 11:40:29 24 4
gpt4 key购买 nike

我只需要使用 sed 在特定字符串“PIC”之后交换每行中的数值。例如:

你好 PIC A(12),这个 PIC B(11)

期望的输出是:

你好 PIC B(11),还有这个 PIC A(12)

字符“B”和“A”在其他行中可能不同,但字符串 PIC 始终存在。

我正在尝试使用 sed 命令:

echo "你好 PIC A(12),还有这个 PIC B(11)"| sed '/PIC X(12)/s/PIC X(12)/PIC X(11)/g'

但似乎无法正常工作。

感谢所有回复。

最佳答案

您可以直接使用 substitute 命令,因为它只会更改找到匹配项的行。

使用这个 POSIX ERE

sed -E 's/(PIC )([A-Z]\([0-9]+\))(.*PIC )([A-Z]\([0-9]+\))/\1\4\3\2/'

或者,POSIX BRE

sed 's/\(PIC \)\([A-Z]([0-9]*)\)\(.*PIC \)\([A-Z]([0-9]*)\)/\1\4\3\2/'

这两个版本在括号转义上有所不同:在 POSIX BRE 中,\(...\) 表示捕获组,而 () 匹配文字括号,而在 POSIX ERE 中,反之亦然。

POSIX ERE 模式详细信息:

  • (PIC ) - 第 1 组:PIC 和空格
  • ([A-Z]\([0-9]+\)) - 第 2 组:任何大写 ASCII 字母,(,1+ 位数字, )
  • (.*PIC ) - 第 3 组:任意 0 个或多个字符、PIC、空格
  • ([A-Z]\([0-9]+\)) - 第 4 组:大写字母,(,1+ 位数字,)

关于linux - 如何仅交换每行中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com