grep匹配完整路径中的文件名

时间:2017-04-03 03:32:39

标签: regex bash grep

我想"提取"使用grep。

的完整路径字符串中的文件名

例如:

  • 在/ etc / network / interfaces中我想匹配"接口"。
  • 在/home/user/Documents/report.pdf中我想匹配" report.pdf"。

基本上我想要与之相反:

$ ls /etc/network/interfaces | grep "^.*/"

我试过了:

$ ls -p /etc/network/interfaces | grep "/.*$"

但它不会是最后一个斜线(/),所有字符(。*),直到结束($)。由于斜杠也是字符,因此它匹配所有路径。

有没有人知道只匹配最后一部分的方法?喜欢的东西(从最后一次斜线到结束。

谢谢,

3 个答案:

答案 0 :(得分:2)

awk,将/分隔的最后一个字段:

% awk -F/ '{print $NF}' <<<'/etc/network/interfaces'
interfaces

% awk -F/ '{print $NF}' <<<'/home/user/Documents/report.pdf'
report.pdf

grep,获取上一个/之后的部分:

% grep -o '[^/]\+$' <<<'/etc/network/interfaces'
interfaces

% grep -o '[^/]\+$' <<<'/home/user/Documents/report.pdf'
report.pdf

sed,用null替换上一个/的所有内容:

% sed 's_.*/__' <<<'/etc/network/interfaces' 
interfaces

% sed 's_.*/__' <<<'/home/user/Documents/report.pdf'
report.pdf

答案 1 :(得分:1)

如何简单地匹配/?此外,对于提取,您需要-o标记grep

ls -p /etc/network/interfaces | grep -o '[^/]*$'

答案 2 :(得分:0)

如第一条评论所述,您可以直接尝试使用awk之类的内容:

ls -l /etc/networks | awk '{print $NF}' | awk -F "/" '{print $NF}'

应该可以修剪这两个awk管道