我正在尝试解析特定目录中的文件名。文件名的格式为:
token1_token2_token3_token(N-1)_token(N).sh
我需要使用分隔符'_'
来剪切标记,并且除了最后两个标记之外需要使用字符串。在上面的检查表输出应该是token1_token2_token3
。
令牌数量不固定。我尝试使用-f#-
cut
命令选项,但没有找到任何解决方案。有什么想法吗?
答案 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
无法完成,您如何使用sed
或awk
sed -r 's/(_[^_]+){2}$//g'
答案 3 :(得分:1)
以不同的方式撰写ysth的回答
echo" t1_t2_t3_tn1_tn2.sh" |转| cut -d" _" -f1,2 - 补充|转