除最后两个令牌外,Unix裁减

use*_*114 19 unix linux bash cut token

我正在尝试解析特定目录中的文件名.文件名的格式为:

token1_token2_token3_token(N-1)_token(N).sh
Run Code Online (Sandbox Code Playgroud)

我需要使用分隔符来剪切标记'_',并且除了最后两个标记之外需要使用字符串.在上面的检查输出应该是token1_token2_token3.

令牌数量不固定.我已尝试使用命令-f#-选项cut,但没有找到任何解决方案.有任何想法吗?

yst*_*sth 36

随着削减:

$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
Run Code Online (Sandbox Code Playgroud)

rev反转每一行.的3--f3-从所述第三字段表示到行结束时(其是通过第三到最后一个字段在非反转文本行的开始).


Shi*_*dim 8

不能用 来完成cut,但是,您可以使用sed

sed -r 's/(_[^_]+){2}$//g'
Run Code Online (Sandbox Code Playgroud)


Rub*_*ens 6

您可以使用POSIX定义的参数替换:

$ name="t1_t2_t3_tn1_tn2.sh"
$ name=${name%_*_*}
$ echo $name
t1_t2_t3
Run Code Online (Sandbox Code Playgroud)