我只是希望得到倒霉的最后一句话,我仍然无法得到最后一句话。
../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
答案 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@'