【发布时间】:2020-09-02 20:58:34
【问题描述】:
我正在编写 bash 脚本,但遇到了问题。我想改变一个字符串中两个字符的位置。
我的输入如下:
"aaaaa_eeeee"
想要的输出是:
"eeeee_aaaaa"
我不想反转字符串或其他类似的东西,我需要用“e”替换字符“a”,用“a”替换“e”。我试图制作一个 echo "aaaaa_eeeee" | tr "a" "e 。第一个替换很简单,但第二个我不知道该怎么做。
【问题讨论】:
我正在编写 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 的手册页描述了翻译集的使用如下:
[T]string1 中的字符被翻译成 string2 中的字符,其中 string1 中的第一个字符被翻译成第一个字符在 string2 等等。如果 string1 比 string2 长,则复制在 string2 中找到的最后一个字符,直到 string1 用完为止。 p>
例如:
$ tr "ae" "ea" <<< "aaaaa_eeeee"
eeeee_aaaaa
这将a => e 和e => a 映射到一个逻辑通道中,避免了会导致尝试按顺序映射替换的问题。
【讨论】:
这是 rev 的工作:
echo "aaaaa_eeeee"|rev
eeeee_aaaaa
【讨论】: