Вывод grep из приложения, показать на экране и записать в файл?

Вопрос или проблема

Я запускаю приложение и перенаправляю вывод в grep. Это работает. Однако я хочу показать вывод на экране и записать в файл.

Поэтому я перенаправляю результат grep в tee:

./app | grep что-то | tee file.txt

Однако это не показывает (или не записывает) результаты, даже когда есть 100% результатов (я подтвердил это с двумя запущенными экземплярами).

Как мне сделать так, чтобы вывод приложения фильтровался с помощью grep, записывался в файл и отображался на экране?

Команда, как вы ее написали, должна работать. Может быть несколько причин неправильной работы команды.

  1. Приложение отправляет текстовый вывод не на стандартный выход.
  2. Строка символов для поиска с помощью команды grep введена неверно.

Решение случая #1

  1. Проверьте вручную, что приложение отправляет желаемый текст на выход, который нужно искать. ./app
  2. Перенаправьте текст вывода в файл ./app > file.txt и проверьте содержимое файла: cat file.txt
  3. Если файл не содержит желаемый текст, вероятно, приложение отправляет вывод в выход с ошибками, а не на стандартный выход. Попробуйте перенаправить в файл другим способом
    ./app 2 > file.txt и снова проверьте содержимое файла: cat file.txt
  4. Если содержимое файла на этот раз правильное, решение простое. Вам нужно только перенаправить вывод ошибок в стандартный выход.
./app 2>&1 | grep "что-то" | tee file.txt

Решение случая #2

  1. Тщательно проверьте строку символов, которую вы используете в качестве шаблона поиска. Заключите ее в кавычки или апострофы, чтобы исключить случайные неверные интерпретации символов подстановки, переменных $variablename, регулярных выражений и т. д.
  2. Начните с тестирования поиска с помощью grep для очень простых строк, состоящих только из букв или цифр, которые невозможно неверно интерпретировать.

Команда ./app 2>&1 | grep "что-то" работает хорошо

Ответ или решение

Для решения вашей задачи по перехвату вывода приложения, фильтрации его с помощью grep и одновременно отображению результата на экране и записи в файл, вы на правильном пути, используя команду tee. Однако, давайте рассмотрим возможные причины, по которым ваша текущая команда может не работать, и предложим пошаговое решение.

Возможные проблемы и их решения

Проблема 1: Приложение использует нестандартный вывод

  1. Проверка вывода приложения:
    Первым шагом мы проверим, выводит ли ваше приложение данные через стандартный вывод. Запустите команду:

    ./app

    Это покажет, что на самом деле выводит ваша программа.

  2. Проверка содержимого файла:
    Если стандартный вывод не показывает ожидаемой информации, попробуйте перенаправить его в файл:

    ./app > file.txt

    После этого посмотрите содержимое файла:

    cat file.txt

    Если в файле нет ожидаемых данных, возможно, приложение выводит информацию в стандартный поток ошибок.

  3. Перенаправление потока ошибок:
    Если вывод действительно находится в стандартном потоке ошибок, попробуйте перенаправить его в файл следующим образом:

    ./app 2> file.txt

    Снова проверьте содержимое файла:

    cat file.txt
  4. Объединение потоков:
    Если предыдущие шаги показали, что данные находятся в стандартном потоке ошибок, необходимо объединить потоки для дальнейшей обработки с помощью grep и tee. Используйте следующую команду:

    ./app 2>&1 | grep "something" | tee file.txt

Проблема 2: Ошибка в шаблоне поиска

  1. Проверка строки поиска:
    Убедитесь, что строка, которую вы ищете с помощью grep, написана правильно. Поместите ее в кавычки, чтобы избежать неправильной интерпретации:

    grep "something"
  2. Тестирование с простыми строками:
    Попробуйте сначала протестировать grep на простом шаблоне, состоящем только из букв или цифр:

    ./app | grep "простой текст"

Полная команда для выполнения

На основании вышесказанного, ваша окончательная команда будет выглядеть так:

./app 2>&1 | grep "something" | tee file.txt

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...