shell中 从长字符中截取子字符串命令 -- echo/awk/cut

shell中的截取字符串的子字符串,比如:

截取 abc_def_ghi_jkl 中, 下划线之前/后的字符串

使用echo两种字符截取方式
  1. 使用"#"/"%":通过特定字符截取

    $ 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
    
  2. 使用索引:通过具体位置截取,格式: ${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截取
  1. 使用substr函数
    相当于上面介绍的echo根据索引位置获取,格式:substr($1, start, end)
    echo ${var_tst} | awk '{print substr($1, 1, 3)}'
    # abc
    
  2. 使用分隔符变量FS
    指定分割符后,再确定要获取的字符位置,注意:需要有特定分隔符,分割符符号长度>=1。
    echo ${var_tst} | awk 'BEGIN{FS="_"}{print $1}
    # abc
    
使用cut截取

cut的截取方式,与awk使用分隔符截取方式类似,只是cut使用是分隔符只能是一位数:

echo ${var_tst} | cut -d"_" -f1
# abc
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值