使用tr或类似工具在bash中交换两个字符。

4

我帮助编写一个bash脚本时遇到了问题。我想要改变字符串中两个字符的位置。

我的输入如下:

"aaaaa_eeeee"

期望的输出是:
"eeeee_aaaaa"

我不想翻转字符串或做其他类似的事情,我需要做的是将字符 "a" 替换为 "e" 并将 "e" 替换为 "a"。我尝试过使用 echo "aaaaa_eeeee" | tr "a" "e" 进行首次替换,但第二次替换我不知道该怎么做。
3个回答

7
您可以给tr提供多个原始字符和替换字符。原始字符串中的每个字符都将被相应的替换字符所替换。
echo "aaaaa_eeeee" | tr "ae" "ea"

2

将翻译集合作为参数传递

为了使替换在单个逻辑通行中起作用,您需要将多个字符传递给tr实用程序。BSD版本的tr的man页面描述了如何使用翻译集合:

[T]字符串中的字符被翻译成字符串2中的字符,其中字符串1中的第一个字符被翻译成字符串2中的第一个字符,依此类推。如果字符串1比字符串2长,则在耗尽字符串1之前复制在字符串2中找到的最后一个字符。

例如:

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

这将在单次逻辑遍历中映射a => ee => a,避免了尝试按顺序映射替换所导致的问题。

0

这是一个逆转的工作:

echo "aaaaa_eeeee"|rev
eeeee_aaaaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接