shell中的截取字符串的子字符串,比如:
截取 abc_def_ghi_jkl 中, 下划线之前/后的字符串
使用echo
的两种字符截取方式:
-
使用"
#
"/"%
":通过特定字符截取$ var=abc_def_ghi_jkl
使用"
#
"截取特定字符之后字符串, 格式:${var#*<yourstr>}
或${var##*<yourstr>}
$ echo ${var#*_} # 一个"#", 截取第一个"_"之后的字符串('*'可看作是"_"之前的任意字符) def_ghi_jkh $ echo ${var##*_} # 两个"##", 截取最后一个"_"之后的字符串 jkl
使用"
%
“截取特定字符之前字符串, 与”#
"类似。格式:${var%<yourstr>*}
或${var%%<yourstr>*}
$ echo ${var%_*} # 一个"%"截取最后一个"_"之前字符串 abc_def_ghi $ echo ${var%%_*} # 两个"%%"截取第一"_"之前字符串 abc
-
使用
索引
:通过具体位置截取,格式:${var:<start>:[<len>]}
$ echo ${var:0:5} # 截取前5个字符,索引0~4对应的字符; 对应python: var[:5] abc_d $ echo ${var:2:5} # 从第三个字符开始,截取五个字符,索引2~6对应的字符;对应python: var[2:5] c_def $ echo ${var:5} # 从左边第5个开始到最后, 从索引7到最后; 对应python: var[5:] ef_ghi_jkl $ echo ${var:0-5} # 截取后5个字符串,相当于索引-1~-5对应的字符; 对应python: var[-5:] i_jkl $ echo ${var:0-5:3} # 截取后5个字符串的前三个字符串; 对应Python: var[-5:][:3] i_j
使用awk截取
- 使用
substr
函数
相当于上面介绍的echo
根据索引位置获取,格式:substr($1, start, end)
echo ${var_tst} | awk '{print substr($1, 1, 3)}' # abc
- 使用分隔符变量
FS
指定分割符后,再确定要获取的字符位置,注意:需要有特定分隔符,分割符符号长度>=1。echo ${var_tst} | awk 'BEGIN{FS="_"}{print $1} # abc
使用cut截取
cut
的截取方式,与awk
使用分隔符截取方式类似,只是cut
使用是分隔符只能是一位数:
echo ${var_tst} | cut -d"_" -f1
# abc