Linux bash的内置字符串处理工具

字符串处理工具

Linux bash内部拥有强大的字符串处理功能,具体功能按章节进行叙述。

1.字符串切片

语法格式:
# ${var:offset:number}
	# 取字符串的子串
		# offset:偏移量
		# number:个数

# ${var: -length}
	# 取字符串的最右侧的几个字符
	# 注意:冒号后必须有一个空白字符
示例:
[root@LEEMUMU ~]# tools="abcdefg"
[root@LEEMUMU ~]# echo ${tools:1:3}
bcd
[root@LEEMUMU ~]# echo ${tools: -3}
efg
[root@LEEMUMU ~]# echo ${tools:3:3}
def

2.基于模式提取字串

基于模式提取字串主要分为四种,如下:

  1. 其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。

    # ${var#*word}
    
  2. 其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。

    # ${var#*word}
    
  3. 其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。

    # ${var%word*}
    
  4. 其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。

    # ${var%%word*}
    

示例1:

[root@LEEMUMU ~]# mypath="/etc/init.d/functions"
[root@LEEMUMU ~]# echo ${mypath#*/}
etc/init.d/functions
[root@LEEMUMU ~]# echo ${mypath##*/}      # 适用于取基名
functions
[root@LEEMUMU ~]# echo ${mypath%/*}       # 适用于取路径名 
/etc/init.d
[root@LEEMUMU ~]# echo ${mypath%%/*}

[root@LEEMUMU ~]# 

示例2:

[root@LEEMUMU ~]# url="http://www.leemumu.com:80"
[root@LEEMUMU ~]# echo ${url##*:}            # 取端口号
80
[root@LEEMUMU ~]# echo ${url%%:*}            # 取协议
http

3.查找替换

注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411

  1. 查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/PATTERN/SUBSTI}
    
  2. 查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替换为SUBSTI所表示的字符串。

    # ${var//PATTERN/SUBSTI}
    
  3. 查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/#PATTERN/SUBSTI}
    
  4. 查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    #${var/%PATTERN/SUBSTI}
    

示例:

[root@LEEMUMU ~]# love="wo ai tangtang,tangtang ai wo"
[root@LEEMUMU ~]# echo ${love/wo/pangpang}       # 第一次匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo/pangpang}      # 所有匹配到的替换
pangpang ai tangtang,tangtang ai pangpang
[root@LEEMUMU ~]# echo ${love/#wo/pangpang}      # 行首匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo/pangpang}      # 行尾匹配到的替换
wo ai tangtang,tangtang ai pangpang

4.查找删除

注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411

  1. 查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,并将其删除。

    # ${var/PATTERN}
    
  2. 查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部删除。

    # ${var//PATTERN}
    
  3. 查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    # ${var/#PATTERN}
    
  4. 查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。

    #${var/%PATTERN}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/wo}                # 第一次匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo}               # 全部匹配到的删除
ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/#wo}               # 行首匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo}               # 行尾匹配到的删除
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/%[[:lower:]]}
wo ai tangtang,tangtang ai w
[root@LEEMUMU ~]# echo ${love/#[[:lower:]]}
o ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/#[a-Z][a-Z]}
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%[a-Z][a-Z]}
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love//[a-Z][a-Z]}
,
[root@LEEMUMU ~]# echo ${love/[a-Z][a-Z]}
ai tangtang,tangtang ai wo

5.大小写替换

  1. 把var中的所有小写字符转换为大写。

    # ${var^^}
    
  2. 把var中的所有大写字符转换为小写。

    # ${var,,}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo $LOVE
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${love^^}
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${LOVE,,}
wo ai tangtang,tangtang ai wo

6.变量赋值

注意:变量赋值过程中如果VALVE有空格的话,需要使用 “” 进行区分。

  1. 如果var变量为空,或未设置,那么返回VALUE;否则,则返回var变量的值。

    # ${var:-VALUE}
    
  2. 如果var变量为空,或未设置,那么返回VALUE,并将VALUE赋值给var变量;否则,则返回var变量的值。

    # ${var:=VALUE}
    
  3. 如果var变量不空,则返回VALUE。否则,返回空值。

    # ${var:+VALUE}
    
  4. 如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值。

    # ${var:?ERROR_INFO}
    

示例:

[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love:-"The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:-"The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo ${love:="The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:="The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo $love1
The value is empty.
[root@LEEMUMU ~]# echo ${love:+"The value is empty"}
The value is empty
[root@LEEMUMU ~]# echo ${love2:+"The value is empty"}

[root@LEEMUMU ~]# echo ${love:?"The value is empty"}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love3:?"The value is empty"}
-bash: love3: The value is empty
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值