【问题标题】:How to split string on forward slash in bash如何在bash中的正斜杠上拆分字符串
【发布时间】:2012-06-02 08:24:31
【问题描述】:

示例字符串:

/gasg/字符串

预期结果:string

要删除的字符:“/”符号之间的所有字符,包括符号

【问题讨论】:

  • batween the "/" symbols 如果只有一个斜线,或者根本没有斜线,应该怎么办?还是第一个斜线之前的文字?

标签: string bash split


【解决方案1】:

sed:

$ echo "/gasg/string" | sed -e 's/\/.*\///g'
string

内置 bash 字符串操作:

$ s="/gag/string"
$ echo "${s##/*/}"
string

您的字符串看起来与 Unix 路径名完全一样。这就是为什么您也可以使用 basename 实用程序 - 它返回给定 Unix 路径名的最后一部分:

$ basename "/gag/string"
string
# It works with relative paths and spaces too:
$ basename "gag/fas das/string bla bla"
string bla bla

【讨论】:

  • 参数展开中的第一个斜线不是必须的。在这种情况下,作业中的引号是必要的,但您应该习惯性地使用它们来扩展。
  • 我同意第一个/ 不是必需的,但我添加它是为了说明这一点。
  • 您的字符串看起来与 Unix 路径名完全一样。 - 是的,我打算获取给定路径名的最后一部分,并且基本名称就像“find -exec basename {} \;”一样,这对我来说太棒了!谢谢你的提示。
  • 请注意,您必须删除第一个斜杠才能使字符串操作适用于 URI/URL(例如 ftp:///documents/string.txt)。
【解决方案2】:

还有 awk - 使用斜杠作为分隔符并打印最后一个字段

echo "/gas/string" | awk -F/ '{print $NF}'

或剪切 - 但这只有在您有相同数量的目录要剥离时才有效

echo "/gasg/string" |cut -d/ -f 3

【讨论】:

  • 你能详细说明为什么-f 3 吗?
  • @mrgloom -f 是字段 ID。例如3 是第三个字段(索引 2)。如果你使用-f 2,结果就是gasg。对于-f 1,它只是一个空字符串,因为第一个斜杠前面没有任何内容。
【解决方案3】:

你可以使用 bash 字符串操作

a='/gasg/string'
echo ${a##*/}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    相关资源
    最近更新 更多