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

时间:2012-12-23 11:00:13

标签: linux bash unix token cut

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

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

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

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

4 个答案:

答案 0 :(得分:33)

随着削减:

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

rev反转每一行。 3-中的-f3-表示从第3个字段到行尾(通过非反转文本中第3个到最后一个字段的行的开头)。

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

使用cut无法完成,您如何使用sedawk

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

答案 3 :(得分:1)

以不同的方式撰写ysth的回答

echo" t1_t2_t3_tn1_tn2.sh" |转| cut -d" _" -f1,2 - 补充|转