像往常一样,当它归结为这样的事情,Awk来拯救:
awk 'BEGIN{FS=OFS="/"}{NF--}1' <file>
请注意,这是
dirname
目录名
awk 'BEGIN{FS=OFS="/"}{gsub("/+","/")}
{s=$0~/^\//;NF-=$NF?1:2;$0=$0?$0:(s?"/":".")};1' <file>
下表显示了差异:
| path | dirname | awk full | awk short |
|------------+---------+----------+-----------|
| . | . | . | |
| / | / | / | |
| foo | . | . | |
| foo/ | . | . | foo |
| foo/bar | foo | foo | foo |
| foo/bar/ | foo | foo | foo/bar |
| /foo | / | / | |
| /foo/ | / | / | /foo |
| /foo/bar | /foo | /foo | /foo |
| /foo/bar/ | /foo | /foo | /foo/bar |
| /foo///bar | /foo | /foo | /foo// |
各种替代解决方案可在
Extracting directory name from an absolute path using sed or awk
. 解决方案
Kent
一切都会好起来的
Solid Kim
只是需要一个小调整,以修复多个斜杠(并错过了upvots!)