Extracting directory name from an absolute path using sed or awk

后端 未结 6 1183
忘掉有多难
忘掉有多难 2021-01-05 13:29

I want to split this line

/home/edwprod/abortive_visit/bin/abortive_proc_call.ksh

to

/home/edwprod/abortive_visit/bin
         


        
6条回答
  •  孤独总比滥情好
    2021-01-05 14:29

    This code with awk will work perfectly as same as dirname, I guess.

    It's so simple and has very low cost to work. Good luck.

    Code

    $ foo=/app/java/jdk1.7.0_71/bin/java
    $ echo "$foo" | awk -F "/*[^/]*/*$" '
    { print ($1 == "" ? (substr($0, 1, 1) == "/" ? "/" : ".") : $1); }'
    

    Result

    /app/java/jdk1.7.0_71/bin

    Test

    • foo=/app/java/jdk1.7.0_71/bin/java -> /app/java/jdk1.7.0_71/bin
    • foo=/app/java/jdk1.7.0_71/bin/ -> /app/java/jdk1.7.0_71
    • foo=/app/java/jdk1.7.0_71/bin -> /app/java/jdk1.7.0_71
    • foo=/app/ -> /
    • foo=/app -> /
    • foo=fighters/ -> .

    More

    If you're not available such awk delimiter, try it this way.

    $ echo $foo | awk '{
     dirname = gensub("/*[^/]*/*$", "", "", $0);
     print (dirname == "" ? (substr($0, 1, 1) == "/" ? "/" : ".") : dirname);
     }'
    

提交回复
热议问题