字符串操作

1、字符串的截取

* 使用${}表达式,格式为${变量名:起始位置:长度},起始位置从0开始
例如:phone=17329212519 echo $(#phone) #输出字符串的长度
echo ${phone:0:6} #输出173192
* 使用expr substr ,格式为:expr substr "$变量名" 起始位置 长度,起始位置从1开始
例如:expr substr "$phone" 1 6 #输出173192
* 使用cut分割工具,格式为:echo $变量名 |cut -b 起始位置-结束位置(起始位置从1开始)
例如:echo $phone |cut -b 1-6 #输出173192
echo $phone |cut -b 1,3,5 #输出不连续数字

2、字符串的替换

*   只替换第一个子串,使用${变量名/old/new}
例如:${phone/9/3} #将第一个9替换为
* 替换全部子串,使用${变量名//old/new}
例如:${phone//9/3} #将所有的9替换为3

3、字符串的匹配删除

定义变量a=`head -1 /etc/passwd`
* 从左向右,最短匹配删除,格式:${变量名#*关键词}
例如:echo ${a#*bin} #从左侧第一个字符到关键词bin(包含bin)输出/bash
* 从左向右,最长匹配删除,格式:${变量名##*关键词}
例如:echo ${a##*:} #删除从左侧第一个字符到最远的关键词,输出/bin/bash
* 从右向左,最短匹配删除,格式:${变量名%关键词*}
* * 从右向左,最长匹配删除,格式:${变量名%%关键词*}

二、字符串初值的处理

*  只取值,${var:-word}:若var存在且非空,返回$var的值,否则返回字串“word”
如:var=${var:-2}

三、正则表达式

-q:静默模式,不输出任何信息         ‘.*'    #输出所有的行
-c:输出匹配信息的行 -i:忽略大小写 []:匹配范围内的单个字符
egrep '.' #匹配非空行 egrep 'f+' #f至少出现一次
egrep '(ab){3}' #ab连续输出3次 egrep '(ab){2,4}' #ab连续输出2-4次
egrep '(ab){2,}' #ab至少连续输出2次
egrep '\binit\b' #输出包括init的行 egrep -v '#|^$' #匹配有效行