Creo que vi no sería la mejor opción por la forma en que maneja el redibujado de pantalla. ¿Puedes ejecutar cat filename.txt
y luego copiarlo todo usando cortar y pegar?
Solo para estar seguro, ¿se conecta al servidor con SSH? Luego, podría usar WinSCP desde su máquina con Windows para conectarse a su caja de Linux y copiar el archivo a través de SSH. Puede obtener WinSCP aquí:https://winscp.net/eng/download.php
Последний grep
в конвейере читал бы из предыдущего grep
(, если бы не использовалась опция -r
, см. далее ), поэтому он не знал бы, из какого файла откуда пришли данные, что, в свою очередь, означает, что он не может сообщить путь к файлу.
Вместо этого рассмотрите возможность использования find
вот так:
find. -type f \
-exec grep -q 2019 {} \; \
-exec grep -q DSL {} \; \
! -exec grep -qi FAILED {} \; \
-print
Это позволит рекурсивно )взять каждый обычный файл из текущего каталога и любого подкаталога (и проверить, содержит ли он строки 2019
, DSL
,иFAILED
(без учета регистра ). Он напечатает пути к файлам, которые содержат первые две строки, но не содержат третью.
Если файл не содержит 2019
, два других теста не будут выполняться, а если он не содержит DSL
, последний тест не будет выполнен и т. д.
Обратите внимание, что вместо grep -v -qi FAILED
я использую отрицание grep -qi FAILED
в качестве третьего теста. Меня не интересует, содержит ли файл строки, не содержащие FAILED
, меня интересует, содержит ли файл FAILED
, и в этом случае я хотел бы пропустить этот файл.
Связанные:
Проблема с конвейером,
grep -r 2019 | grep -riv FAILED | grep -rl DSL
заключается в том, что последний grep
будет рекурсивно просматривать все файлы в текущем каталоге и ниже и игнорировать ввод с предыдущих этапов конвейера. Два первоначальных вызова grep
могут произвести некоторые данные, но они не смогут передать их через конвейер и в конечном итоге будут уничтожены, когда будет выполнен последний grep
.
Также, как я уже отмечал выше, средний grep
не будет находить файлы, не содержащие FAILED
, он будет находить файлы, содержащие строки с вещами, отличными от FAILED
. Между прочим, он также игнорирует входные данные предыдущего grep
.
С GNUgrep
(-r
уже является расширением GNU )и GNU xargs
или совместимым:
grep -rlZ 2019. |
xargs -r0 grep -LiZ FAILED |
xargs -r0 grep -l DSL
Вам нужно xargs
, чтобы иметь возможность передавать список файлов вывода по одному grep
в качестве аргументов следующему grep
. И -Z
для того, чтобы этот список файлов был ограничен NUL -. Чтобы сообщить список файлов, которые не содержат FAILED, это также-L
(расширение GNU ), а не -vl
, которое сообщает о файлах, содержащих хотя бы одну строку, которая не соответствует.
Это должно свести количество grep
вызовов к минимуму, а для большого количества файлов можно одновременно использовать до трех процессоров.