Shell脚本字符串截取/替换
Linux 的字符串截取、替换很有用。
假设有变量 var=http://www.aaa.com/123.htm
先总结
| Bash |
|---|
| # 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分
*属于正则表达,也可以使用其它去匹配值
比如: var=https
我想删除最后一个字符s,可以这样写
echo ${var%?}
输出: http
|
1. #号截取,从左匹配第一个,删除前边字符,保留后边字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
|
2. ##号截取,从左匹配最后一个,删除前边字符,保留后边字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是: 123.htm
|
3. %号截取,从右匹配第一个,删除后边字符,保留前边字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
|
4. %%号截取,从右匹配最后一个,删除后边字符,保留前边字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
|
5. 从左边截取前5个字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
|
6. 从左边第8个字符开始,一直到结束
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
|
7. 从后边第7个字符开始,截取前3个字符
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
|
8. 从后边第7个字符开始,一直到结束
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
|
9. / 替换第一个匹配的字符,也可以删除
假设有变量 var=http://www.aaa.com/123.htm
| Bash |
|---|
| 替换www为aaa:
echo ${var/www/aaa}
表示将第一个匹配的 www 替换为 aaa
结果是:http://aaa.aaa.com/123.htm
删除www.:
echo ${var/www./}
删除在斜杠后不需要跟值
结果是:http://aaa.com/123.htm
|
10. // 替换所有匹配到的字符,也可以删除
假设有变量 var=http://aaa.aaa.com/123.htm
| Bash |
|---|
| 替换所有aaa为bbb:
echo ${var//aaa/bbb}
表示将匹配的所有 aaa 替换为 bbb
结果是:http://bbb.bbb.com/123.htm
删除所有aaa.:
echo ${var//aaa./}
使用双斜杠删除所有匹配
结果是: http://com/123.htm
|
11. ${#var} 获取变量长度
假设有变量 var=http://
| Bash |
|---|
| echo ${#var}
获取变量字符长度,结果是: 7
|