用 tr 或类似的方式交换 bash 中的两个字符

Swap two characters in bash with tr or similar

我正在编写 bash 脚本,但遇到了问题。我想改变字符串中两个字符的位置。

我的输入如下:

"aaaaa_eeeee"

期望的输出是:

"eeeee_aaaaa"

我不想反转字符串或其他类似的东西,我需要用“e”替换字符“a”,用“a”替换“e”。我试图制作一个 echo "aaaaa_eeeee" | tr "a" "e 。第一个替换很简单,但是第二个我不知道怎么做。

您可以给tr多个原始字符和替换字符。原始字符串中的每个字符都被替换为相应的替换字符。

echo "aaaaa_eeeee" | tr "ae" "ea"

将翻译集作为参数传递

要使替换在单个逻辑传递中起作用,您需要将多个字符传递给 tr 实用程序。 BSD版tr的man page对翻译集的使用描述如下:

[T]he characters in string1 are translated into the characters in string2 where the first character in string1 is translated into the first character in string2 and so on. If string1 is longer than string2, the last character found in string2 is duplicated until string1 is exhausted.

例如:

$ tr "ae" "ea" <<< "aaaaa_eeeee"
eeeee_aaaaa

这在单个逻辑通道中映射 a => ee => a,避免了可能导致尝试按顺序映射替换的问题。

这是 rev 的工作:

echo "aaaaa_eeeee"|rev
eeeee_aaaaa