Linux终端中的字符串使用总结(截取,切片,查找替换,转换,变量赋值等)

一、基于模式匹配截取字符串

一、#、##号截取

     #号截取,从左边开始,以一个出现的分隔符(最左)为准,删除左边字符。spa

     ##号截取,从左边开始,以最后(最右)一个分隔符为准,删除左边字符。3d

str='hello world'
echo ${str#*l}
echo ${str##*l}
echo ${str##*llo}

#*l 表示从左边开始删除第一个出现的w左边的全部字符。##*l 表示从左边开始删除最后一个出现的w左边的全部字符。code

二、%、%%号截取

     %号截取,从右边开始,以一个出现的分隔符(最右)为准,删除右边字符。blog

     %%号截取,从右边开始,以最后一个出现的分隔符(最左)为准,删除右边字符。字符串

str='hello world'
echo ${str%l*}
echo ${str%%l*}
echo ${str%lo*}

%l* 表示从右边开始删除第一个出现的w右边的全部字符。%%l* 表示从右边开始删除最后一个出现的w右边的全部字符。class

二、字符串切片

字符串切片:${var:offset:length}awk

一、当length为正数

str='hello world'
echo ${str:0:7} #从第0个字符开始,截取7个字符。
echo ${str:7}  #从左边开始第七个字符,一直到结束。
echo ${str:0-7:2} #从右边开始第七个字符,截取2个字符。
echo ${str:0-7:3} #从右边开始第七个字符,截取3个字符。
echo ${str:0-7} #从右边开始第七个字符,一直到结束。

二、当length为负数

str='hello world'
echo ${str:0:-2} #从第0个字符开始,一直到倒数第二个字符。
echo ${str:0-7:-2} #从右往做数的第七个字符开始,一直到倒数第二个字符。
echo ${str:4:-2} #从第四个字符开始,一直到倒数第二个字符。
echo ${str: -2} #从右边开始(倒数)第二个字符,一直到最后。注意冒号后有空格,等效于${str:0-2}。

三、查找替换字符串

${var/pattern/substi}:查找var所表示的字串中,第一次被Pattern匹配到的字串,并以substi替换之。变量

${var//patten/substi}:查找var所表示的字串中,全部被Pattern匹配到的字串,并以substi替换之。方法

${var/#pattern/substi}:以行首锚定的方式将pattern匹配至var所表示的字串上,若是能匹配,则以substi替换之。im

${var/%pattern/substi}:以行尾锚定的方式将pattern匹配至var所表示的字串上,若是能匹配,则以substi替换之。
以上都可使用?, *元字符。

str='hello world'
echo ${str/l/e}
echo ${str//l/e}
echo ${str/#l/e}
echo ${str/#hel/e}
echo ${str/%ld/e}
echo ${str/h*o/hi}
echo ${str/h??/eee}

 

 ${var/pattern}:替换为空,即删除pattern匹配到的第一次出现。
 ${var//pattern}: 删除pattern匹配到的全部出现。
 ${var/#pattern}
 ${var/%pattern}

使用方法同上。

四、字符串大小写转换

${var^^}:小写-->大写

${var,,}:大写-->小写

str='hello WORLD'
echo ${str^^}
echo $str | tr '[a-z]' '[A-Z]'
echo ${str,,}
echo $str | tr '[A-Z]' '[a-z]'

大小写转换的方式不少,还包括 declare、awk等。

五、变量赋值

有无冒号存在细微差异

一、有冒号

一般用来表示变量是否有值(定义且非空)。

${var:-word}: 若是var为空或未设置,那么返回word;不然,则返回var中的值; 

${var:=word}:若是var为空或未设置,那么返回word,而且将word赋值给var;不然,返回var中的值;

${var:?err_info}:若是var为空或未设置,那么返回错误信息;不然,则返回var自身的值;

${var:+word}:若是var自身有正常数据,则返回word;

str='hello world'
echo ${str:-word}
str=''
echo ${str:-word}
echo ${str:=word}
echo $str
echo ${str:?error}
str=''
echo ${str:?error}
echo $? #查看上条命令是否返回错误信息
echo ${str:+word}
str='asdas'
echo ${str:+word}

二、无冒号

若去掉冒号则表示变量为空也视为变量有正常值存在。一般用来表示变量是否认义。

str='hello world'
echo ${str-word}
str=''
echo ${str-word}
echo ${strr-word}
echo $str
echo ${str?error}
echo ${strr?error}
echo $? #查看上条命令是否返回错误信息

相关文章
相关标签/搜索