Grep之前和之后'/'

时间:2013-11-17 08:53:08

标签: linux bash unix grep

我试图在'/'

之前和之后编写一个回音字符串的脚本

示例输入

/Library/Users/foo.txt

现在我需要两个输出

  1. /Library/Users
  2. foo.txt
  3. 我如何获得这些输出

4 个答案:

答案 0 :(得分:5)

使用dirnamebasename

$ dirname /Library/Users/foo.txt
/Library/Users
$ basename /Library/Users/foo.txt
foo.txt

答案 1 :(得分:1)

dirname& basename是/ bin中的独立程序。这可以更有效地完成,完全在使用内置变量替换的bash中 - 没有不必要的exec到dirname或basename。

使用$ { var%re }从 var 中删除尾随的正则表达式,并使用$ { var ## re }来从var:

开始剥离
$ path=/Libarary/Users/foo.txt
$ dir=${path%/*}
$ base=${path##*/} 
$ echo $path : basename is $base and dir is $dir
/Library/Users/foo.txt : basename is foo.txt and dir is /Library/Users

答案 2 :(得分:0)

使用awk

awk -F/ '{$NF=x;sub(/\/$/,x)}1' OFS=/
/Library/Users

awk -F/ '{print $NF}'
foo.txt

答案 3 :(得分:0)

falsetru的答案将启动2个进程。如果性能是一个问题 可以使用参数替换,例如

path="/Library/Users/foo.txt"

dir="${path%/*}"
base="${path##*/}"

echo "${path%/*}"
echo "${path##*/}"