Переданный grep для просмотра внутренних файлов

Creo que vi no sería la mejor opción por la forma en que maneja el redibujado de pantalla. ¿Puedes ejecutar cat filename.txty 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

0
24.07.2019, 11:13
2 ответа

Последний grepв конвейере читал бы из предыдущего grep(, если бы не использовалась опция -r, см. далее ), поэтому он не знал бы, из какого файла откуда пришли данные, что, в свою очередь, означает, что он не может сообщить путь к файлу.

Вместо этого рассмотрите возможность использования findвот так:

find. -type f \
    -exec grep -q 2019 {} \; \
    -exec grep -q DSL {} \; \
    ! -exec grep -qi FAILED {} \; \
    -print

Это позволит рекурсивно )взять каждый обычный файл из текущего каталога и любого подкаталога (и проверить, содержит ли он строки 2019, DSLFAILED(без учета регистра ). Он напечатает пути к файлам, которые содержат первые две строки, но не содержат третью.

Если файл не содержит 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.

4
28.01.2020, 02:14

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

2
28.01.2020, 02:14

Теги

Похожие вопросы