2016-02-29 2 views
0

Я хочу найти шаблон, а затем напечатать этот узор. Я нашел, что grep -o будет лучшим вариантом, но у меня его нет. Я могу использовать sed, grep или awk.Поиск рисунка и шаблона печати

Выход: находка: не Chdir к </home/test/.ssh>: Отказано в

Я хочу, чтобы соответствовать шаблону «/ дома/тест» и вернуть «/home/test/.ssh» и игнорировать остальную часть линии ,

Я пробовал:

find /home/test 2>&1 | sed -n '/\/home\/test\/.ssh/ s/.*\(\/home\/test\/.ssh\).*/\1/p' 

Но это заменяет все матчи с/дома/тест

Любая помощь будет оценена.

+0

Почему бы не просто «найти/home/test -name» .ssh''? – Sobrique

+0

@Sobrique Я пытаюсь объяснить stderr. Я не думаю, что это сработает, потому что я хочу найти все в/home/test. Если вывод содержит мой пример вывода выше, я хочу только напечатать путь. – Gautam

+0

Примером того, что вы пытаетесь вывести, было бы хорошей идеей. – Sobrique

ответ

0

С find, печатая ошибку на "вещах, к которым у вас нет доступа", это немного другой сценарий. find печатает на «STDERR», когда это произойдет. Таким образом, вы можете просто:

find /home/test 2>&1 1>/dev/null 

Это просто напечатает ошибки, которые вы ударили своей находкой. Если вам все еще нужно «очистить» в разрешении отказано ошибка, если grep -o является то, что вы после этого, вы, вероятно, может сделать это в perl:

find /home/test 2>&1 1>/dev/null | perl -ne 'print m,<(.*)>,' 

(предполагается, что ваш выход из find имеет путь в <>)

+0

Это отлично работает! Есть ли какой-либо способ разделить вывод на новые строки, а не на одну строчку? – Gautam

+0

Да. 'perl -ne 'print m, <(.*)>,," \ n "'' – Sobrique

Смежные вопросы