如何使用 bash 命令在字符串的 2 个不同字符之间剪切子字符串?

How to cut a substring between 2 different characters of a string using a bash command?

我有以下字符串,我想从第一个 -.

之间删除一个子字符串
something-123_2523123_1232+12312-more-GI2342.txt

我尝试使用如下 cut 命令:

echo something-123_2523123_1232+12312-more-GI2342.txt | cut -d'-' -f 2

上面的输出是123_2523123_1232+12312,只对了一半。 cut 命令已正确获取第一个 -,但随后我需要告诉它继续执行直到 . 并输出子字符串。我该怎么做?

或者如何在第一个 -. 之间剪掉一个子串?

您可以连续使用两个cut。使用 -f2- 您可以 select 从第二个字段开始的所有字段。

echo something-123_2523123_1232+12312-more-GI2342.txt | cut -d- -f2- | cut -d. -f1

或者,使用 bash 的内置 parameter expansion

s=something-123_2523123_1232+12312-more-GI2342.txt
s=${s#*-}
s=${s%%.*}
echo "$s"

...或sedgrep。还有很多方法可以做到这一点。