【问题标题】:Remove a character from string从字符串中删除一个字符
【发布时间】:2023-03-14 18:54:01
【问题描述】:

我只是想从变量中删除% 符号,所以我可以对结果进行数学计算。我已经尝试了几件事,但它们似乎都不起作用:

$ output="23%"
# usep=$(echo $output | awk '{print $1}' | cut -d '%' -f 1)
# usep=`echo $output | sed 's/\%//g`
# usep=`echo $output | head -c 2`

变量usep 仍然包含% 字符。有什么想法吗?

【问题讨论】:

  • 看起来您只是在尝试随机命令,而不了解每个命令的作用。阅读每个手册页,以便您可以理解它们,然后不要使用它们中的任何一个,而是查看 Ruben 的答案。另外,鉴于您在上面发布的内容,我保证您在脚本的其余部分中做错了“数学计算”,所以如果您需要帮助,请发布。

标签: linux bash sed awk cut


【解决方案1】:

您可以使用 POSIX 参数替换:

$ output="23%"
$ usep=${output%%\%}
$ echo $usep
23

【讨论】:

  • 绝对是最好的答案。无需使用外部工具。
  • @gniourf_gniourf Bash 替换生命! (:
  • FWIW - 这是 POSIX 参数替换。任何符合 POSIX 的 shell 都将拥有它——例如 ksh 拥有它。见:pubs.opengroup.org/onlinepubs/009695399/utilities/…
  • @jimmcnamara 我不是这些手续的专家;因为我有 bash for shell,所以一切对我来说都是 bash,这是错误的,我同意,所以我感谢你的警告! (: 我会尝试使用其他 shell,以及 ubuntu 以外的其他东西 ^^ 有什么建议吗?
  • 你可以得到 zsh,它做了一些非常不同于 bash 的事情。它内置了时间算术。 bash 没有 - bash 使用 date 命令。
【解决方案2】:

output 指定为

output="23%"

你错过了第二个'

usep=`echo $output | sed 's/%//g'`

【讨论】:

    【解决方案3】:

    不知道为什么使用 cut 的方法不适合您,但这里有一个非常适合我:

    #!/bin/bash
    
    output="23%"
    usep=`echo $output | cut -d '%' -f 1`
    echo $usep
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2016-06-24
      • 2017-08-19
      相关资源
      最近更新 更多