awk साथ इस कोड dirname के रूप में पूरी तरह से के रूप में ही काम करेंगे, मुझे लगता है।
यह इतना आसान है और काम करने के लिए बहुत कम लागत है। सौभाग्य।
कोड
$ foo=/app/java/jdk1.7.0_71/bin/java
$ echo "$foo" | awk -F "/?[^/]*/?$" '
{ print ($1 == "" ? (substr($0, 1, 1) == "/" ? "/" : ".") : $1); }'
परिणाम
/app/java/jdk1.7.0_71/bin
टेस्ट
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/
->.
अधिक
आप उपलब्ध ऐसे awk सीमांकक नहीं कर रहे हैं, यह इस तरह का प्रयास करें।
$ echo $foo | awk '{
dirname = gensub("/?[^/]*/?$", "", "", $0);
print (dirname == "" ? (substr($0, 1, 1) == "/" ? "/" : ".") : dirname);
}'
स्रोत
2017-03-28 02:49:38
संदर्भ क्या है? क्या यह एक फाइल में है? क्या आपके पास एक से अधिक घटनाएं हैं? क्या आप... ? – fge
इसके लिए sed और awk overkill हैं, गोले के लिए इसके लिए उपयोगिताएं सीधे हैं। – Mat
यदि आप बैश का उपयोग कर रहे हैं: क्यों 'dirname' कमांड का उपयोग न करें? – codeling