0

要剪切字符串中的最后一个字段,我使用:

command:         echo /dir1/dir2/dir3/file | awk -F "/" '{ print $NF; }'
output:          file

如何从同一字符串中的最后一个分隔符获取左侧的所有内容?

desired output:  /dir1/dir2/dir3   

谢谢你的帮助

拉斯蒂

4

3 回答 3

5

bash本身就足以做到这一点:

VAR="/dir1/dir2/dir3/file" echo ${VAR%/*}
于 2011-07-16T14:01:16.083 回答
2

如果您正在专门使用文件名,dirname并且basename是该工作的工具:

pax$ dirname /dir1/dir2/dir3/file
/dir1/dir2/dir3

pax$ basename /dir1/dir2/dir3/file
file

对于任意分隔符,您可以使用sed

pax$ echo /dir1/dir2/dir3/file | sed 's?/[^/]*$??'
/dir1/dir2/dir3

pax$ echo /dir1/dir2/dir3/file | sed 's?^.*/??'
file

第一个替换序列“斜线后跟零个或多个非斜线到行尾”(/file)什么都没有。第二个将行首到最后一个斜杠 ( /dir1/dir2/dir3/) 的所有内容替换为空。

如果要将这些命令的输出分配给变量,可以使用$()

pax$ filespec=$(basename /dir1/dir2/dir3/file) ; echo $filespec
file
于 2011-07-16T13:56:19.017 回答
1

我猜你正在寻找dirname命令。

> dirname /dir1/dir2/dir3/file
/dir1/dir2/dir3    

只是为了完整性:basename

于 2011-07-16T13:44:42.383 回答