使用 cut 删除直到结束的分隔符

Using cut to remove until a delimiter from end

我有一个包含许多定界符的字符串,例如:

abcd - efgh - foobar.extension(分隔符'-')

我想删除

    - foobar.extension

到目前为止,我已经完成了

    a='abcd - efgh - foobar.extension'
    b=`echo $a | rev | cut -d'-' -f 1 | rev`
    echo $b

但这并没有帮助,因为它回显了

    foobar.extension

我希望能够在找到最终定界符('-')之前保留初始部分。

在 bash 中,您可以使用此内置字符串操作:

a='abcd - efgh - foobar.extension'
echo "${a% -*}"
abcd - efgh

"${a% -*}" 将从字符串末尾删除 $a 中以 space 后跟 - 开头的任何部分。

或使用sed:

sed 's/ *- *[^-]*$//' <<< "$a"
abcd - efgh

您可以使用 cut 到 select 一系列字段:

$ echo 'abcd - efgh - foobar.extension' | cut -d'-' -f -2
abcd - efgh

此处,-f -2 select所有字段直到(并包括)第二个字段,它切断了第二个分隔符后的所有内容。