如何交换字符串中每两个字符对的顺序?

Eet*_*Eet 3 sed awk text-processing

我正在尝试在任意长度的十六进制字符字符串中自动交换字符 1 和 2、3 和 4 等。

例子:

A627E39B
Run Code Online (Sandbox Code Playgroud)

变成:

6A723EB9
Run Code Online (Sandbox Code Playgroud)

使用 sed 或其他 *nix 文本实用程序之一似乎应该可以做到这一点,但到目前为止我还没有找到任何示例。

Ste*_*itt 8

您可以使用反向引用:

echo A627E39B | sed 's/\(.\)\(.\)/\2\1/g'
Run Code Online (Sandbox Code Playgroud)

这将查找所有出现的两个字符并交换它们。

正如glenn jackman指出的那样,启用扩展的正则表达式(-E带有 GNU、BSD 或toybox seds)可以避免转义括号:

echo A627E39B | sed -E 's/(.)(.)/\2\1/g'
Run Code Online (Sandbox Code Playgroud)