【问题标题】:how to remove specify characters at the end of string?如何删除字符串末尾的指定字符?
【发布时间】:2019-01-11 23:15:54
【问题描述】:

我有一些这样的路径:

/dir
/dir//
/dir///
/path/to/dir
/path/to/dir/
/path/to/dir///
/path/to/dir/////////

我想使用 bash 使其更清晰。我想删除路径末尾的所有 / 字符并具有: /path/to/dir/dir 最后没有 /

【问题讨论】:

  • 欢迎来到 SO。 Stack Overflow 是一个面向专业和狂热程序员的问答网站。目标是您将一些自己的代码添加到您的问题中,以至少显示您为解决这个问题所做的研究工作。
  • @Cyrus 我所做的是使用sed 命令仅删除最后一个/。所以我需要帮助才能删除字符串末尾的所有/...所以这可能非常困难
  • sed 's|/*$||' file
  • 如果您需要从 bash 变量中删除它,另请参阅 stackoverflow.com/a/27846529(需要 extglob)

标签: bash awk sed grep cut


【解决方案1】:

这可能是一个可能的解决方案:

sed -e 's/[/]*$//g'

例如:

echo '/path/to/dir/////////' | sed -e 's/[/]*$//g'

给你:

/path/to/dir

【讨论】:

  • @Lino,除非需要双引号,否则请使用单引号。在这里不会有什么不同,但这是一个很好的做法。请参阅stackoverflow.com/questions/6697753/…stackoverflow.com/questions/7680504/… 了解详细信息
  • 注意,* 表示零个或多个,所以这在上面的正则表达式中总是匹配的。也许s/\/\+$//gs#//*$##g 会更好。
  • @potong 你能告诉我 Lino 解决方案的例外情况吗?
  • @yasin Lino 的解决方案是正确的,但即使没有可替代的东西,也总是会替代。这可能会导致错误的心态,尤其是在以后修改替换命令的 RHS 时,例如<<<'/abc/xyz' sed 's/[/]*$/X/' 这也提醒我g 标志是多余的,因为只有一个行尾!
  • 使用 / 作为分隔符意味着您必须在正则表达式中对其进行转义。只是不要那样做。 s:/*$::.
【解决方案2】:

关注awk 可能会对您有所帮助。

awk '{sub(/\/+$/,"")} 1'  Input_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多