Shell-4-字符串处理
${}
获取字符串长度
eg:
| echo ${#"Boii"} # 错误写法
word="Boii"
echo ${#word} # 4
|
字符串切片
| ${string:start:length} # 对 string 从 start 开始截取 length 个字符
${string:start} # 对 string 从 start 开始截取到 字符串末尾
|
下标从 0 开始,负数表示倒数第 n 个。
eg:
| string:| H | e | l | l | o | | B | o | i | i |
正标: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
负标: |-10| -9| -8| -7| -6| -5| -4| -3| -2| -1|
word="Hello Boii"
# 从左往右数,向右截取
echo ${word:0:5} # Hello
echo ${word:6:2} # Bo 从第7个开始,截取2个
echo ${word:6:-1} # Boi 从第7个开始,截取至倒数第1个
echo ${word:6} # Boii 从第7个开始,截取至末尾
echo ${word:(-1)} # i 截取最后一个字符
echo ${word:(-2)} # ii 截取最后两个字符
echo ${word:(-3):2} # oi 从倒数第3个开始,截取2个
# 从右往左数,向右截取
echo ${word:0-8:5} # llo B
echo ${word:0-8} # llo Boii
|
替换字符串
| ${string/OLD/NEW} # 用 NEW 替换字符串中 第一个 OLD
${string//OLD/NEW} # 用 NEW 替换字符串中 所有 OLD
|
eg:
| str="abc,def,ghi,abcxyz"
echo ${str/abc/BOII} # BOII,def,ghi,abcxyz
echo ${str//abc/BOII} # BOII,def,ghi,BOIIxyz
|
字符串截取
#
:取右、删头
#
:最短匹配,匹配第一个
##
:最长匹配,匹配最后一个
%
:取左、删尾
%
:最短匹配,匹配第一个
%%
:最长匹配,匹配最后一个
| str="opcabxyzc,def,ghi,abcxyz"
echo ${str#*ab} # xyzc,,def,ghi,abcxyz
echo ${str##*ab} # cxyz
|
| str="opcabxyzc,def,ghi,abcxyz"
echo ${str%xyz*} # abxyzc,def,ghi,abc
echo ${str%%xyz*} # ab
|
变量状态赋值
-
${VAR:-str}
如果 VAR 变量为空则返回 str
| if VAR == nil {
return str
}else{
return VAR
}
|
eg:
| word=
echo ${word:-abc} # abc
word=123
echo ${word:-abc} # 123
|
-
${VAR:+str}
如果 VAR 变量不为空则返回 str
| if VAR != nil {
return str
}else{
return nil
}
|
eg:
| word=
echo ${word:+abc} #
word=123
echo ${word:+abc} # abc
|
-
${VAR:=str}
如果 VAR 变量为空则重新赋值 VAR 变量值为 str
| if VAR == nil {
VAR = str
}
|
eg:
| word=
echo ${word:=abc} # abc
word=123
echo ${word:=abc} # 123
|
-
${VAR:?str}
如果 VAR 变量为空则将 str 输出到 stderr
| if VAR == nil {
panic(str)
}
|
eg:
| word=
echo ${word:?word is empty} # test.sh:行2: word: word is empty
word2="aaa"
echo ${word2:?word2 is empty} # aaa
|
字符串颜色
\033[0m
关闭属性;
\033[XY
设置属性,X为具体参数,多个参数用分号;
隔开。Y为模式
模式:
- m: 文本颜色
- A | B | C | D : 光标移动
- H | s | u | ?25l | ?25h : 设置、保存、恢复、显示、隐藏光标位置
- 2J | K: 清除
文本颜色
\033[字体属性;背景色;字体色m 文本内容 \033[0m
颜色 |
背景色代码 |
字体色代码 |
高亮色码 |
黑 Black |
40 |
30 |
90 |
红 Red |
41 |
31 |
91 |
绿 Green |
42 |
32 |
92 |
黄 Yelllow |
43 |
33 |
93 |
蓝 Blue |
44 |
34 |
94 |
紫 Magenta |
45 |
35 |
95 |
青 Cyan |
46 |
36 |
96 |
白 White |
47 |
37 |
97 |
字体属性 |
代码 |
0 |
常规 |
1 |
加粗 |
4 |
下划线 |
5 |
闪烁 |
7 |
反色 |
8 |
消隐 |
字体属性可以叠加,参数之间用分号隔开。
eg:粗体+下划线+白底红字 -> \033[1;4;47;31m 文本内容 \033[0m
光标
\033[nA
: 光标上移 n 行
\033[nB
: 光标下移 n 行
\033[nC
: 光标左移 n 行
\033[nD
: 光标右移 n 行
\033[y;xH
设置光标位置为第 y 行 第 x 个字符。
\033[s
: 保存光标位置
\033[u
: 恢复光标位置
\033[?25l
: 隐藏光标
\033[?25h
: 显示光标
\033[K
: 清除从光标到行尾的内容
\033[2J
: 清屏