Очевидно, что закрытие stdout не приводит к неудаче, наоборот, это удается, потому что запись на него не удается, как видно из сообщения об ошибке. Edit: чтобы уточнить мой ответ, скажу, что сначала вы говорите оболочке закрыть дескриптор файла, а затем программа ls
пытается записать на него. Отсюда и возникает сообщение об ошибке.
Если файл журнала не много гигабайт,
perl -0ne 'for( /Device ID.*?Port ID.*?\n/sg ){ print "-"x 20,"\n$_\n"}' file
Есть ли у вас возможность использовать egrep вместо awk?
egrep "Device|IP\ address|Interface|Port\ ID" input-file.txt
Это напечатает любую строку, которая соответствует полям, которые вы ищете:
awk '/Device ID|IP address|Interface|Port ID/ { print }' /path/to/input
You может сделать то же самое с grep
, sed
и другими подобными инструментами.
Вы можете даже немного пофантазировать:
grep -Eo '(Device ID|IP address|Interface|Port ID): [^ ]+' /path/to/input