Я застрял, пытаясь определить регулярное выражение perl для извлечения следующих значений: (каталоги / home / mail / dump всегда будут одинаковыми). Спасибо.
abc
123456
Это вывод:
drwxr-xr-x - mail_hd mail_users 0 2011-03-26 20:12 /home/mail/dump/abc drwxr-xr-x - mail_hd mail_users 0 2011-04-15 09:10 /home/mail/dump/123456
Возможно, вместо этого используйте split и basename.
split
basename
Следующее регулярное выражение perl выдаст только символы после последней косой черты.
s=.*/==
Пример:
$ echo 'wxr-xr-x - mail_hd mail_users 0 2011-03-16 18:46 /home/mail/dump/abc' | perl -pe 's=.*/==' abc
Это похоже на это.
Разделитесь на "/" и получите последний элемент
awk -F"/" '{print $NF}' file
Ruby (1.9+) (аналогично Perl)
$ ruby -ne 'print $_.sub(/.*\//,"")' file abc 123456 $ ruby -F"/" -ane 'print $F[-1]' file abc 123456
Может быть, это полезно, должно вернуть то, что вам нужно.
if ($subject =~ m!/home/mail/dump/(.*)$!) { $result = $1; } else { $result = ""; }
соответствует всему после /home/mail/dump/ до конца строки
/home/mail/dump/