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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容