Shell字符串

367 阅读2分钟

变量字符串删除


# 变量删除总结
	# 1. ${变量名#匹配规则}  从变量'开头'进行规则匹配,将符合最'短'的数据删除(惰性匹配)
	# 2. ${变量名##匹配规则} 从变量'开头'进行规则匹配,将符合最'长'的数据删除(贪婪匹配)
	# 3. ${变量名%匹配规则}  从变量'结尾'进行规则匹配,将符合最'短'的数据删除(惰性匹配)
	# 4. ${变量名%%匹配规则} 从变量'结尾'进行规则匹配,将符合最'长'的数据删除(贪婪匹配)

# # 1.从头开始匹配, 最短删除
# variable_1="I love you, Do you love me?";
# echo $variable_1;
# var1=${variable_1#*ov};
# echo $var1;

# # 2.从头开始匹配, 最长删除
# variable_1="I love you, Do you love me?";
# echo $variable_1;
# var1=${variable_1##*ov};
# echo $var1;

# # 3.从尾开始匹配, 最短删除
# variable_1="I love you, Do you love me?";
# echo $variable_1;
# var1=${variable_1%ov*};
# echo $var1;

# # 4.从尾开始匹配, 最长删除
# variable_1="I love you, Do you love me?";
# echo $variable_1;
# var1=${variable_1%%ov*};
# echo $var1;


# eg
res=`curl "https://baidu.com/" -Is`

echo ${res}

# # 提取状态码
# res1=${res#* }  #去掉第一个空格之前所有字符
# status_code=${res1%% *} #去掉第一个空格之后所有字符
# echo ${status_code}

# # 提取服务器名称
# res2=${res#*Server:}
# server_name=${res2%%
# *}
# echo ${server_name}

# # 提起Location
# res3=${res#*Location:}
# location=${res3%%
# *}
# echo ${location}

# 提取content-type
# res4=${res#*Content-Type: }
# content_type=${res4%%
# *}
# echo ${content_type}

# 无目的 测试[[:digit:]]
# res5=${res}
# content_length=${res5%[[:digit:]][[:digit:]]*}
# echo ${content_length}

变量替换

# 变量替换

# 变量替换总结:
	# 1. ${变量名/旧字符串/新字符串} 变量内容符合旧字符串,则'第一个'旧字符串会被新字符串取代
	# 2. ${变量名//旧字符串/新字符串} 变量内容符合旧字符串,则'全部的'旧字符串会被新字符串取代


# variable_1="I love you, Do you love me?";
# echo $variable_1;
# # 1.将第一个旧字符串替换成新字符串 单斜线/
# 	var1=${variable_1/ /_};
# 	echo $var1;

# # 2.将所有的旧字符串替换成新字符串 双斜线//
# 	var1=${variable_1// /_};
# 	echo $var1;

# res=`curl https://baidu.com -Is`

# echo ${res/*Location:/}
# echo ${res//[[:digit:]]/}

变量测试



# 变量测试总结:
	# 1. ${str-expr}  变量已经声明时,取str,否则expr
	# 2. ${str:-expr} 变量已经声明且不为空时,取str,否则expr
	# 3. ${str+expr}  变量已经声明时,取expr,否则取空串 
	# 4. ${str:+expr} 变量已经声明且不为空时,取expr,否则str
	# 5. ${str=expr}  变量已经声明时,取str, 否则expr
	# 6. ${str:=expr} 变量已经声明且不为空时,取str,否则expr
	

# ${str-expr}测试  变量已经声明时,取str,否则expr
# echo ${str-helloworld} # helloworld
# str=""
# echo ${str-helloworld} # 
# str="str"
# echo ${str-helloworld} # str


# ${str:-expr}测试 变量已经声明且不为空时,取str,否则expr
# echo ${str:-helloworld} # helloworld
# str=""
# echo ${str:-helloworld} # helloworld
# str="str"
# echo ${str:-helloworld} # str



# ${str+expr}测试 变量已经声明时,取expr,否则取空串
# echo ${str+helloworld} # 
# str=""
# echo ${str+helloworld} # helloworld
# str="str"
# echo ${str+helloworld} # helloworld




# ${str:+expr}测试 变量已经声明且不为空时,取expr,否则str
# echo ${str:+helloworld} #
# str=""
# echo ${str:+helloworld} #
# str="str"
# echo ${str:+helloworld} # helloworld




# ${str=expr}测试 变量已经声明时,取str, 否则expr
# echo ${str=helloworld} # helloworld
# str=""
# echo ${str=helloworld} #
# str="str"
# echo ${str=helloworld} # str




# ${str:=expr}测试 变量已经声明且为空时,取expr,否则str
# echo ${str:=helloworld} # str
# str=""
# echo ${str:=helloworld} # helloworld
# str="str"
# echo ${str:=helloworld} # str

变量长度

# 计算字符串长度
string="helloworld"
# 方法1
echo ${#string} # 10
# 方法2
echo `expr length "$string"` # 10

变量索引

# 在str2中找到一个在str1中索引最靠前的一个字符的索引,没有这样字符的时候,索引为0.
str1="helloworld";
str2="worldheorld";
echo `expr index $str1 $str2`;

变量匹配


# 从头开始匹配看全部匹配的长度,支持Posix正则表达式元字符,比如[[:digit:]][[:alpha:]][[:alnum:]]等
string="helloworld"
substr="[[:alpha:]]ello[[:alpha:]]orl[[:alpha:]]"
echo `expr match $string $substr`

子串


# 子串
string="Hello World"

# 方法一:${string:position}从string中的position开始 索引是从0开始的 自动去空格
echo ${string: 5}
# 方法二:${string:position:length}从position开始,长度为length 索引是从0开始的 自动去空格
echo ${string: 5: 6}
# 方法三:${string:-position}从右边开始 索引是从0开始的 自动去空格
echo ${string: -6}
# 方法四:${string:(position)}从左边开始匹配 索引是从0开始的 自动去空格
echo ${string: (5)}
echo ${string: (-6)}
# 方法五:expr substr $string $position $length 索引是从1开始的 自动去空格
echo `expr substr "$string" 6 6`