BuddyPress bbPress

Shell高效的字符串切割替换删除

标签:,
  • 866  1#5666
    飞仔
    参与者
    楼主

    Shell 字符串匹配截取

    注意:匹配某些特殊符号比如 / 时,要在前面增加转义符 \

    例如:匹配字符 ab 未有匹配则保持原字符串输出,正则匹配 [0-9][a-z][!0-9]

    切割:

    ${str#*ab}    的 #*ab   表示从左到右匹配,将首个匹配的 ab 以及之前的所有字符串删除
    ${str##*ab}   的 ##*ab  表示从左到右匹配,将最后匹配的 ab 以及之前的所有字符串删除
    ${str%%ab*}   的 %%ab*  表示从左到右匹配,将首个匹配的 ab 以及之后的所有字符串删除
    ${str%ab*}    的 %ab*   表示从左到右匹配,将最后匹配的 ab 以及之后的所有字符串删除
    
    ${str:0-3}    的 :0-3   表示截取最后 3 位字符。注意:若字符串长度只有2位则会失败

    删除:

    ${str#a}                 方向从左到右开始匹配 → 删除以 a 起始的一个字符
    ${str%a}                 方向从右到左开始匹配 ← 删除以 a 起始的一个字符
    ${str#"${str%%[!a]*}"}   方向从左到右开始匹配 → 删除以 a 起始的连续重复字符,直至出现其他字符为止
    ${str%"${str##*[!a]}"}   方向从右到左开始匹配 ← 删除以 a 起始的连续重复字符,直至出现其他字符为止

    替换:

    ${str/ab/+}   的 /ab/+  表示从左到右匹配,首次匹配 字符 ab 替换成 + 
    ${str/%ab/+}  的 /%ab/+ 表示只匹配 后缀 字符 ab 替换成 + 
    ${str/#ab/+}  的 /#ab/+ 表示只匹配 前缀 字符 ab 替换成 + 
    ${str//ab/+}  的 //ab/+ 表示将全部匹配的 ab 全部替换成 +
    • 该话题由飞仔 于 2年、 2月前 修正。
    • 该话题由飞仔 于 2年、 2月前 修正。
    • 该话题由飞仔 于 2月、 2周前 修正。
    • 该话题由飞仔 于 2月、 2周前 修正。
    • 该话题由飞仔 于 2月、 2周前 修正。
回复 1
    • 2#6544
      飞仔
      参与者
      楼主

      grep 截取字符串

      # 随机字符串
      a="vm10068fj2018cl312d23llls3210"
      
      # 截取:3位数及以上连续的纯数字
      root@test:~# echo "$a" | grep -o "[0-9][0-9][0-9][0-9]*"
      10068
      2018
      312
      3210
      
      # 截取:4位数,纯数字
      root@test:~# echo "$a" | grep -o "[0-9][0-9][0-9][0-9]"
      1006
      2018
      3210
回复 1
  • 哎呀,回复话题必需登录。