Unix除了最后两个令牌之外,

我试图parsing特定目录中的文件名。 文件名格式为:

token1_token2_token3_token(N-1)_token(N).sh 

我需要使用分隔符'_'来剪切标记,除了最后两个标记之外,还需要使用string。 在上面的例子中输出应该是token1_token2_token3

令牌的数量不固定。 我已经试过用-f#- cut命令的选项来做,但没有find任何解决scheme。 有任何想法吗?

Solutions Collecting From Web of "Unix除了最后两个令牌之外,"

随着切:

 $ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev t1_t2_t3 

转每行反转。 3--f3-意味着从第三场到行的末尾(这是通过-f3-中的-f3-第三场的行的开始)。

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

 $ name="t1_t2_t3_tn1_tn2.sh" $ name=${name%_*_*} $ echo $name t1_t2_t3 

它不能用cut来完成,你怎样才能使用sedawk

 sed -r 's/(_[^_]+){2}$//g' 

只是写一个不同的方式来回答你的问题

回声“t1_t2_t3_tn1_tn2.sh”| rev | cut -d“_”-f1,2 –complement | 转