变量替换
1、${变量名#匹配规则}
作用:从变量开头进行规则匹配,将符合最短的数据删除
[root@php.svn-server ~]
# var="I Love you! Do you love me?"
[root@php.svn-server ~] //从开头匹配去除I字符
# echo ${var#I}
Love you! Do you love me?
[root@php.svn-server ~] //从开头匹配任意字符带ov的字符串删除
# echo ${var#*ov}
e you! Do you love me?
2、${变量名##匹配规则}
作用:从变量开头进行规则匹配,将符合最长的数据删除
[root@php.svn-server ~]
# var="I Love you! Do you love me?"
[root@php.svn-server ~]
# echo ${var##*ov}
e me?
3、${变量名%匹配规则}
作用:从变量尾部进行规则匹配,将符合最短的数据删除
[root@php.svn-server ~]
# echo ${var%ov*}
I Love you! Do you l
#属于倒数开始
4、${变量名%%匹配规则}
作用:从变量尾部进行规则匹配,将符合最长的数据删除
[root@php.svn-server ~]
# echo ${var%%ov*}
I L
5、${变量名/旧字符串/新字符串}
作用:变量内容符合旧字符规则,则第一个就字符会被新字符串取代
[root@php.svn-server ~]
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@php.svn-server ~]
# echo ${PATH/bin/BIN}
/usr/local/sBIN:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
6、${变量名//旧字符串/新字符串}
作用:变量内容符合旧字符串则,则全部的旧字符串会被新字符串取代
[root@php.svn-server ~]
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@php.svn-server ~]
# echo ${PATH//bin/BIN}
/usr/local/sBIN:/usr/local/BIN:/usr/sBIN:/usr/BIN:/root/BIN
字符串处理
计算字符串的长度方式一: ${#string}
[root@php.svn-server ~]
# echo ${#PATH}
59
计算字符串的长度方式二: expr length ${变量}
[root@php.svn-server ~]
# expr length "$PATH"
59
计算字符串的长度方式三: expr macth ${变量} 表达式
说明:match是从头开始匹配的。
[root@php.svn-server ~]
# var1="quickstart is a app"
[root@php.svn-server ~]
# echo `expr match "$var1" quic`
4
[root@php.svn-server ~]
# echo `expr match "$var1" app`
0
[root@php.svn-server ~]
# echo `expr match "$var1" .*a`
17
[root@php.svn-server ~]
# echo `expr match "$var1" .*app`
19
获取字符串索引位置:expr index ${string} substr
说明:索引从1开始计数。
[root@php.svn-server ~]
# var1="quicstart is a app"
[root@php.svn-server ~]
# var1="quickstart is a app"
[root@php.svn-server ~]
# echo `expr index "$var1" start`
6
[root@php.svn-server ~]
# echo `expr index "$var1" uniq`
1
注意点:expr会把start中切成一个一个的字符进行匹配,例如s就出现在索引在6的位置上。而第二次uniq是查找出q了最先出现的位置上。就是1
抽取子字符串的方式一:${string:position}
说明:从string中的postion开始
索引从0开始
[vagrant@docker-host ~]$ var1="wo shi qi dong"
[vagrant@docker-host ~]$ echo ${var1:5}
i qi dong
抽取子字符串的方式二:${string:postion:length}
说明:从postion开始,匹配长度为length
[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1:5:5}
56789
抽取子字符串的方式三:${string:-position}
说明:从右边开始匹配、注意必须中间有空格
[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1: -5 }
56789
[vagrant@docker-host ~]$ echo ${var1: -5 :2}
56
[vagrant@docker-host ~]$
##下面的方式同理
抽取子字符串的方式四:${string:(position)}
说明:从左边开始匹配
[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1:(-5)}
56789
[vagrant@docker-host ~]$
抽取子字符串的方式五:expr substr $string $position $length
说明:从postion开始,匹配长度的length
[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo `expr substr "$var1" 5 5`
45678
[vagrant@docker-host ~]$
因为索引是从1开始的、所以结果为45678
编写一个简单的交互脚本
说明:格式一定要严格,不能有; {}位置一定要放好
#!/usr/bin/env bash
string="BigData process frame work is Hadoop,Hadoop is an open source project"
function print_tips()
{
echo "********************************"
echo "(1) 打印string长度"
echo "(2) 删除字符中所有的Hadoop"
echo "(3) 替换第一个Hadoop为Mapreduce"
echo "(4) 替换全部Hadoop为Mapreduce"
echo "********************************"
}
function len_of_string
{
echo "${#string}"
}
function del_hadoop
{
echo "${string//Hadoop/}"
}
function rep_hadoop_mapreduce_first
{
echo ${string/Hadoop/Mapreduce}
}
function rep_hadoop_mapreduce_all()
{
echo ${string//Hadoop/Mapredice}
}
while true
do
echo -e "\r\n"
echo "[string=$string]"
echo
print_tips
read -p "Pls input your choice(1|2|3|4|q|Q):" choice
case ${choice} in
1)
len_of_string ;;
2)
del_hadoop ;;
3)
rep_hadoop_mapreduce_first ;;
4)
rep_hadoop_mapreduce_all ;;
q|Q)
exit
;;
*)
echo "Error;please input (1|2|3|4|q|Q)";
;;
esac
done
One comment
每次看到你的文章,我都觉得时间过得好快。 http://www.55baobei.com/pC7Xi3WBs6.html