如何从字符串中删除最后一个字符?

如何从字符串中删除最后一个字符?

我有一个变量设置为var='type_cardio_10-11-2017'.我需要从变量中删除最后 10 个字母,并将剩余的值附加到var2.

我尝试使用以下脚本,但它没有按预期工作。

var=type_cardio_10-11-2017
var2=${var} | cut -f1 -d "_"
echo ${var2}

我想要的输出是心脏类型

答案1

要删除最后一个之后的所有内容_并将var结果分配给var2

var2=${var%_*}

参数扩展从给定变量值的末尾${parameter%word}删除模式word(在本例中)。_*

POSIX 标准称其为“删除最小的后缀模式”参数扩展。

要删除最后一个下划线及其后面的 10 个字符,请使用

var2=${var%_??????????}

要删除与日期字符串(例如示例中的字符串)相对应的字符,请使用

var2=${var%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]}

您使用哪种模式取决于您想要执行匹配的仔细程度。

答案2

您实际上想删除尾随11字符串中的字符;这是另一种方法:

$ var=type_cardio_10-11-2017
$ var2=${var%???????????}
$ echo "$var2"
type_cardio

答案3

另一种方法bash

echo "${var::-10}"

或者在旧版本中:

echo "${var::${#var}-10}" #or
echo "${var: : -10}"

答案4

附加varvar2是最简单的部分 - 您可以像这样加入它们new_var="$var$var2"。如果你什么真的意思是说你想要店铺裁剪varvar2,然后就可以了var2=$(...),您可以将其他用户和我的答案在此处呈现的命令放入该$()部分内。

主要部分是删除这 10 个字符。有多种方法可以从中提取您想要的部分var

  • printf(非常便携,不依赖特定的 shell)

    $ printf "%.11s\n"  "$var"                                                                                                                                                                      
    type_cardio
    
  • awk

    $ var=type_cardio_10-11-2017                                                                                                                                                                    
    $ awk -v awk_var="$var"  'BEGIN{print substr(awk_var,0,length(awk_var)-11)}'                                                                                                                    
    type_cardio
    

    或者你printf也可以在这里使用技巧:

    $ echo "$var" | awk '{printf "%.11s\n",$0}'                                                                                                                                                     
    type_cardio
    
  • egrep

    $ echo "$var" | egrep  -o '^.{0,11}'                                                                                                                                                           
    type_cardio
    
  • perl:

    $ echo "$var" | perl -lne 'print substr($_,0,11)'                                                                                                                                               
    type_cardio
    
  • python

    $ python -c 'import sys;print sys.argv[1][0:11] ' "$var"                                                                                                                                        
    type_cardio
    

相关内容