【问题标题】:Swap two characters in bash with tr or similar用 tr 或类似的交换 bash 中的两个字符
【发布时间】:2020-09-02 20:58:34
【问题描述】:

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

我的输入如下:

"aaaaa_eeeee"

想要的输出是:

"eeeee_aaaaa"

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

【问题讨论】:

    标签: bash replace tr


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      将翻译集作为参数传递

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

      [T]string1 中的字符被翻译成 string2 中的字符,其中 string1 中的第一个字符被翻译成第一个字符在 string2 等等。如果 string1string2 长,则复制在 string2 中找到的最后一个字符,直到 string1 用完为止。 p>

      例如:

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

      这将a =&gt; ee =&gt; a 映射到一个逻辑通道中,避免了会导致尝试按顺序映射替换的问题。

      【讨论】:

        【解决方案3】:

        这是 rev 的工作:

        echo "aaaaa_eeeee"|rev
        eeeee_aaaaa
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多