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

Rak*_*dra 10 shell text-processing cut variable

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

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

var=type_cardio_10-11-2017
var2=${var} | cut -f1 -d "_"
echo ${var2}
Run Code Online (Sandbox Code Playgroud)

我想要的输出是type_cardio

Kus*_*nda 17

要从 last _in之后删除所有内容var并将结果分配给var2

var2=${var%_*}
Run Code Online (Sandbox Code Playgroud)

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

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

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

var2=${var%_??????????}
Run Code Online (Sandbox Code Playgroud)

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

var2=${var%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]}
Run Code Online (Sandbox Code Playgroud)

您使用哪种模式取决于您希望如何仔细地执行匹配。


Jef*_*ler 12

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

$ var=type_cardio_10-11-2017
$ var2=${var%???????????}
$ echo "$var2"
type_cardio
Run Code Online (Sandbox Code Playgroud)


αғs*_*нιη 7

另一种方法bash

echo "${var::-10}"
Run Code Online (Sandbox Code Playgroud)

或者在旧版本中:

echo "${var::${#var}-10}" #or
echo "${var: : -10}"
Run Code Online (Sandbox Code Playgroud)