使用grep或cut从目录中获取最后一个文件夹

时间:2013-12-19 15:21:57

标签: shell grep cut

我只是希望得到倒霉的最后一句话,我仍然无法得到最后一句话。

../init.d/halt
../init.d/killall
../init.d/watchdog
../init.d/iptables
../init.d/network
../init.d/evlogrmt
../init.d/evlog
../init.d/rdisc
../init.d/syslog-ng
../init.d/portmap

5 个答案:

答案 0 :(得分:3)

由于我认为不可能使用cut进行单线程,所以让我们提出一个grep解决方案:

$ grep -oE '[^/]+$' file
halt
killall
watchdog
iptables
network
evlogrmt
evlog
rdisc
syslog-ng
portmap

当然,使用awk非常简单:awk -F/ '{print $NF}' file

答案 1 :(得分:2)

这是basename的作用:

$ xargs -I% basename % < file                                                  
halt
killall
watchdog
iptables
network
evlogrmt
evlog
rdisc
syslog-ng
portmap

答案 2 :(得分:1)

awk

$ awk -F "/" '{print $NF}' file
halt
killall
watchdog
iptables
network
evlogrmt
evlog
rdisc
syslog-ng
portmap

另一种选择(特定于bash)

$ while read line; do echo "${line##*/}"; done < file
halt
killall
watchdog
iptables
network
evlogrmt
evlog
rdisc
syslog-ng
portmap

答案 3 :(得分:0)

使用basename

$ basename ../init.d/portmap

返回:

portmap

答案 4 :(得分:0)

我更喜欢basename和AWK

但您也可以使用sed,在/(包括/)之前删除所有内容:

sed 's/.*\///'

要避免反斜杠,可以用这种方式运行sed:

sed 's@.*/@@' file

或者您可以在最后一个/

之后打印任何内容
sed -r 's@.*/(.*)@\1@'