如何从字符串中的最后一个分隔符到左边的所有内容?

时间:2011-07-16 13:42:10

标签: linux string sed awk cut

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

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

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

desired output:  /dir1/dir2/dir3   

谢谢你的帮助

Rasty

3 个答案:

答案 0 :(得分:3)

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

VAR="/dir1/dir2/dir3/file" echo ${VAR%/*}

答案 1 :(得分:2)

如果您专门使用文件名,dirnamebasename是工作的工具:

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

答案 2 :(得分:1)

我猜您正在寻找dirname命令。

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

为了完整性:basename