2013-12-19 2 views
1

Я просто хочу, чтобы последнее слово, которое я пробовал, тоже обратное. Я не могу получить последнее слово.Получение последней папки из каталога с помощью 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 

ответ

3

Как я не думаю, что это возможно сделать один-лайнер с cut, давайте предложить grep решение:

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

Конечно, с awk это довольно просто: awk -F/ '{print $NF}' file.

+1

Спасибо :) Я сделал с AWK понравилось решение, которое вы предоставили с Grep –

+0

+1 пропущенного что вы уже перечислили AWK путь. Похоже, это самый простой способ сделать это, причем чтение в петле является самым быстрым (по крайней мере, в bash). – BroSlow

2

Это то, что делает basename:

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

Использование basename:

$ basename ../init.d/portmap 

, которая возвращает:

portmap 
1

awk версия

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

Другой вариант (Баш специфические)

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

Так что мы оба не могли устоять перед отправкой 'awk' :) – fedorqui

0

Я предпочитаю имя файла и AWK

, но вы также можете сделать это с помощью СЭД, удалить все, прежде чем/(включая /):

sed 's/.*\///' 

Чтобы избежать обратной косой черты, вы можете запустить sed таким образом:

sed '[email protected]*/@@' file 

или вы можете напечатать что-нибудь после того, как последние/

sed -r '[email protected]*/(.*)@\[email protected]' 
Смежные вопросы