shell中用$表达式截取和替换字符串
文章目录
说道截取字符串,我们常常会想到cut\awk等工具,其实shell自身截取字符串命令也很强大,下面以变量字符串url=https://liming.pub/post/shell-substring-removal/index.html
为例介绍几种字符串截取和替换方法:
左删除
最小匹配删除${var#Pattern},从$var中删除与$var从前到后最短匹配$Pattern的字符,即从左边开始删除第一个$Pattern匹配的字符。 如:
1 2
echo ${url#*/} #/liming.pub/post/shell-substring-removal/index.html echo ${url#*.} #pub/post/shell-substring-removal/index.html
最大匹配删除${var##Pattern},从$var中删除与$var从前到后最长匹配$Pattern的字符,即从左边开始删除最后一个$Pattern匹配的字符。 如:
1 2
echo ${url##*/} #index.html echo ${url##*.} #html
右删除
最小匹配删除${var%Pattern},从$var中删除与$var从后到前最短匹配$Pattern的字符,即从右边开始删除第一个$Pattern匹配的字符。 如:
1 2
echo ${url%/*} #https://liming.pub/post/shell-substring-removal echo ${url%.*} #https://liming.pub/post/shell-substring-removal/index
最大匹配删除${var%%Pattern},从$var中删除与$var从后到前最长匹配$Pattern的字符,即从右边开始删除最后一个$Pattern匹配的字符。 如:
1 2
echo ${url%%/*} #https: echo ${url%%.*} #https://liming
抽取
- ${var:pos},抽取从$pos开始到结尾。
- ${var:pos:len},抽取从$pos开始$len长度的字符串。
bash echo ${url:8} #liming.pub/post/shell-substring-removal/index.html echo ${url:8:10} #liming.pub
替换
- 首次匹配并替换
${var/Pattern/Replacement}
- 全部匹配并替换
${var//Pattern/Replacement}
- 全部匹配并删除
${var//Pattern}
,由于Replacement没有,默认会认为是空字符串:
|
|
要点
- 前后:键盘上#在左,%在右,所以#为左删除,%为右删除;
- 大小:一个字符为小,两个字符为大,所以#为最小匹配,##为最大匹配。