2018-04-16 bash替换字符串的不足——模式重复次数和规则无法设置

  1. str=abcdef1234whag8as
  2. 2045 $ echo ${str/123/000/}
    abcdef000/4whag8as
  3. 2046 $ echo ${str/123/000}
    abcdef0004whag8as
    4.2047 $ echo ${str/123/}
    abcdef4whag8as
    5.2048 $ echo ${str/[0-9]/} 只替换了1
    abcdef234whag8as
    6.2049 $ echo ${str//[0-9]/}
    abcdefwhagas
    思考, 怎么只替换第一段数字,其后的不动?做不到吧?
    7.2050 $ echo ${str/[0-9]*/} *表示任意字符了,而不是重复前面的模式了
    abcdef
    8.2051 $ echo ${str/[0-9]?/}
    abcdef34whag8as
    2052 $ echo ${str/[0-9]???/}
    abcdefwhag8as
    ? 表示站位了,也无法代表前面的模式. + 也没用
  4. 2057 $ echo ${str//[^0-9]/} 去掉所有非数字
    12348

总结: 模式开头使用一个斜杠表示职匹配一次出现,使用两个斜杠则匹配整个字符串中的全部出现。但是想要更多设置模式匹配的规则或次数就不行了。只能是要么处理第一次的匹配,要么处理所有的匹配。

你可能感兴趣的:(2018-04-16 bash替换字符串的不足——模式重复次数和规则无法设置)