使用 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所有字段直到(并包括)第二个字段,它切断了第二个分隔符后的所有内容。
我有一个包含许多定界符的字符串,例如:
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所有字段直到(并包括)第二个字段,它切断了第二个分隔符后的所有内容。