我正在尝试解析特定目录中的文件名。文件名的格式为:
token1_token2_token3_token(N-1)_token(N).sh
我需要使用 delimiter 切割标记'_'
,并且需要获取除最后两个标记之外的字符串。在上面的示例中,输出应该是token1_token2_token3
.
令牌的数量不是固定的。我试过用命令-f#-
选项来做cut
,但没有找到任何解决方案。有任何想法吗?
带切割:
$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
rev 反转每一行。3-
in表示从第-f3-
3 个字段到行尾(即在未反转文本中通过倒数第三个字段的行开头)。
您可以使用 POSIX 定义的参数替换:
$ name="t1_t2_t3_tn1_tn2.sh"
$ name=${name%_*_*}
$ echo $name
t1_t2_t3
它不能用 来完成cut
,但是,你可以使用sed
sed -r 's/(_[^_]+){2}$//g'
只是写ysth答案的另一种方式:
echo "t1_t2_t3_tn1_tn2.sh" |rev| cut -d"_" -f1,2 --complement | rev