本文共 2014 字,大约阅读时间需要 6 分钟。
在Shell脚本中,$
前面的变量可以通过特殊字符进行操作。这些字符用于字符串替换和删除,常见的有井号#
、百分号%
、斜杠/
和其他特殊符号。
${变量名#匹配规则}
var1=${variable#ov}
将从variable
中删除最短的以ov
结尾的数据。var2=${variable##ov}
将从variable
中删除最长的以ov
结尾的数据。${变量名%匹配规则}
var5=${variable_2%to*}
将从variable_2
中删除最短的以to
开头的数据。${变量名/旧字符串/新字符串}
var6=${PATH/bin/BIN}
将将PATH
中的第一个bin
替换为BIN
。${变量名//旧字符串/新字符串}
var7=${PATH//bin/BIN}
将将PATH
中的所有bin
替换为BIN
。在实际应用中,可以使用unset
命令删除环境变量:
unset var1unset var2
expr length "$string"
var2="I love you ,Do you love me"; len=$(expr length "$var2"); echo $len
${#string}
len=${#var1}; echo $len
通过expr index
和expr match
命令,结合substr
函数,可以提取字符串的特定子串。
从左到右提取子串
expr index "$string" start
返回子串的起始位置。expr match "$string" pattern substr:
从头开始匹配pattern
,提示提取特定的子串。var3="Quickstart is a app"; ind=$(expr index "$var3" start); echo $ind
ind
的值为6
。
从右到左提取子串
expr index "$string" -length
获取字符串长度。var5="hello boby,come on"; substr_3=$(expr index "$var5" -length 5); echo $substr_3
结果为me on
。
替换第一个匹配项
expr replace "$string" from
(旧字符串) to
(新字符串)var6=${PATH/bin/BIN}
将bin
替换为BIN
。
替换所有匹配项
//
符号进行替换。var7=${PATH//bin/BIN}
将PATH
中的所有bin
替换为BIN
。
假设用户输入一个初始字符串string="Bigdata process framework is Hadoop,Hadoop is an open source project"
脚本提供以下交互功能:
Hadoop
。Hadoop
为Mapreduce
。Hadoop
为Mapreduce
。脚本结构如下:
#!/bin/bashwhile true do echo "当前字符串认知:$string" echo "可选提示(输入1-4或q/Q退出): 1. 打印字符串长度 2. 删除所有Hadoop 3. 替换第一个Hadoop为Mapreduce 4. 替换所有Hadoop为Mapreduce q. 退出循环" read -p "请输入你的选择:" choice case $choice in 1|1) echo "${#string}" ;; 2|2) echo "${string//Hadoop/}" ;; 3|3) echo "${string/Hadoop/Mapreduce}" ;; 4|4) echo "${string//Hadoop/Mapreduce}" ;; q|Q) exit *) echo "输入错误,请从选项中选择" ;; esacdone
通过以上脚本,可以实现对字符串的多种操作,满足实际应用需求。
转载地址:http://sramz.baihongyu.com/