【问题标题】:How to get specific subset of bash string如何获取 bash 字符串的特定子集
【发布时间】:2020-07-12 16:20:22
【问题描述】:

对于诸如"c-zyte5:p-6db39" 之类的字符串,我如何解析它以获取特定子集,例如p-6db39 - 将前9 个字符和最后一个字符都去掉?

【问题讨论】:

  • echo "c-zyte5:p-6db39" | sed -E 's/(.+):(.+)/\2/'
  • echo "c-zyte5:p-6db39" | grep -Eo '[^:]+$'

标签: bash awk sh


【解决方案1】:

除了子字符串索引,您还可以使用带有子字符串删除的 参数扩展 来删除从左到上直到第一个 ':' 的所有字符,例如

v="c-zyte5:p-6db39"
echo "${v##*:}"

结果

p-6db39

【讨论】:

  • 请注意,在问题中,双引号实际上是字符串的一部分。所以这个答案产生p-6db39"
  • 哦,那么在那种情况下v="\"c-zyte5:p-6db39\""; v="${v%\"}"; echo "${v##*:}"(从右边修剪结束引号,然后从左边修剪直到':'
【解决方案2】:

你可以写:

foo='"c-zyte5:p-6db39"'
echo "${foo:9:-1}"            # prints p-6db39

(见the Bash Reference Manual, §3.5.3 "Shell Parameter Expansion"。)

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多