Linux基础(62)之bash的字符串处理

Linux基础(62)之bash的字符串处理

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

先定义如下变量用于测试:

$ mypath='/usr/bin/wget'
$ tmpStr='root:x:0:0:root:/root:/bin/bash'

字符串切片

${var:offset:number}
    取 var 字符串变量偏移 offset  位后 number 长度的字符串。

示例

例 1:向右偏移 4 位再切片 4 位。

$ echo ${mypath:4:4}
/bin

例 2:向右偏移 4 位再切片到末尾。

$ echo ${mypath:4}
/bin/wget

例 3:向左偏移 4 位再切片到右边末尾。

$ echo ${mypath: -4}
wget

注意,偏移量为负数时前面需有一个空格。

例 4:向左偏移 8 位向右切片 3 位。

$ echo ${mypath: -8:3}
bin

基于模式取子串

${var#*word}
    其中 word 可以是指定的任意字符,自左而右,删除字符串开头至第一次出现 word 字符之间的所有字符。
${var##*word}
    其中 word 可以是指定的任意字符,自左而右,删除字符串开头至最后一次出现 word 字符之间的所有字符。
${var%word*}
    其中 word 可以是指定的任意字符,自右而左,删除字符串尾部至第一次出现 word 字符之间的所有字符。
${var%%word*}
    其中 word 可以是指定的任意字符,自右而左,删除字符串尾部至最后一次出现 word 字符之间的所有字符。

示例

例 1:自左向右删除字符串开头到第一次出现 / 的位置。

$ echo ${mypath#*/}
usr/bin/wget

例 2:自左向右删除字符串开头到最后一次出现 / 的位置。

$ echo ${mypath##*/}
wget

例 3:自右向左删除字符串尾部到第一次出现 / 的位置。

$ echo ${mypath%/*}
/usr/bin

例 4:自右向左删除字符串尾部到最后一次出现 / 的位置。

$ echo ${mypath%%/*}

查找替换

${var/pattern/substi}
    在指定的 var 字符串中查找到第一次被 pattern 匹配的部分,用 substi 替换之。
${var//pattern/substi}
    在指定的 var 字符串中查找到所有被 pattern 匹配的部分,用 substi 替换之。
${var/#pattern/substi}
    在指定的 var 字符串中查找行首被 pattern 匹配的部分,用 substi 替换之。
${var/%pattern/substi}
    在指定的 var 字符串中查找行尾被 pattern 匹配的部分,用 substi 替换之。

示例

例 1:替换字符串中第一个 rootROOT

$ echo ${tmpStr/root/ROOT}
ROOT:x:0:0:root:/root:/bin/bash

例 2:替换字符串中所有 rootROOT

$ echo ${tmpStr//root/ROOT}
ROOT:x:0:0:ROOT:/ROOT:/bin/bash

例 3:替换字符串中行首的 rootROOT

$ echo ${tmpStr/#root/ROOT}
ROOT:x:0:0:root:/root:/bin/bash

例 4:替换字符串中行尾的 bashBASH

$ echo ${tmpStr/%bash/BASH}
root:x:0:0:root:/root:/bin/BASH

查找删除

${var/pattern}
    在指定的 var 字符串中查找到第一次被 pattern 匹配的部分,删除之。
${var//pattern}
    在指定的 var 字符串中查找到所有被 pattern 匹配的部分,删除之。
${var/#pattern}
    在指定的 var 字符串中查找行首被 pattern 匹配的部分,删除之。
${var/%pattern}
    在指定的 var 字符串中查找行尾被 pattern 匹配的部分,删除之。

示例

例 1:删除字符串中第一次出现的 root

$ echo ${tmpStr/root}
:x:0:0:root:/root:/bin/bash

例 2:删除字符串中所有的 root

$ echo ${tmpStr//root}
:x:0:0::/:/bin/bash

例 3:删除字符串中行首的 root

$ echo ${tmpStr/#root}
:x:0:0:root:/root:/bin/bash

例 4:删除字符串中行尾的 bash

$ echo ${tmpStr/%bash}
root:x:0:0:root:/root:/bin/

大小写转换

${var^^}
    把 var 字符串中的所有小写字母转为大写。
${var,,}
    把 var 字符串中的所有大写字母转为小写。

示例

例 1:把字符串中所有小写字母转大写。

$ echo ${mypath^^}
/USR/BIN/WGET

例 2:把字符串中所有大写字母转小写。

$ tmpStr2=`echo ${mypath^^}`
$ echo $tmpStr2
/USR/BIN/WGET
$ echo ${tmpStr2,,}
/usr/bin/wget

变量赋值

${var:-value}
    如果 var 为空或未设置,则返回 value 的值,否则,返回 var 的值。
${var:=value}
    如果 var 为空或未设置,则返回 value 的值,并且把 value 的值赋值给 var,否则,返回 var 的值。
${var:+value}
    如果 var 不为空,则返回 value 的值。
${var:?error_info}
    如果 var 为空或未设置,通过错误输出流返回错误信息。

示例

例 1:有变量 var1 不为空,var2 为空,输出 var2,为空时返回 var1 的值,查看 var2

$ var1='value1'
$ echo ${var2:-$var1}
value1
$ echo $var2

例 2:有变量 var1 不为空,var2 为空,输出 var2,为空时返回 var1 的值,并把 var1 的值赋给 var2,查看 var2

$ var1='value1'
$ echo ${var2:=$var1}
value1
$ echo $var2
value1

例 3:有变量 var1var2 都不为空,输出 var1,不为空时返回 var2

$ var1='value1'
$ var2='value2'
$ echo ${var1:+$var2}
value2
$ unset var1
$ echo ${var1:+$var2}

例 4:输出一个不存在的变量 var3,返回错误信息。

$ echo ${var3:?error_info}
-bash: var3: error_info

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/linux-base-62.html

Buy me a cup of coffee ☕.