интеллектуальный способ чтения другого файла для слов, которые нужно исключить при чтении журналов.

Problema resuelto.

La definición de terminal me da una pista para la solución. Revisé la definición de terminal SCO en /etc/termcap, después de esa definición en Progreso en /usr/dlc7/protermcap. Elijo otro terminal que no sea xterm, compatible y cambio la configuración de putty en Terminal ->Keyboard -> The Function keys and keypad -> VT100+yConnection -> Data -> Terminal-type string -> vt220

Ahora la visualización y el aspecto están bien, las teclas de función como ESC y F1 -F4 se comportan como en la configuración original.

0
10.12.2019, 22:10
1 ответ

Используйте /usr/xpg4/bin/grepв Solaris для чтения шаблонов из файла с помощью -fи сравнения строк с помощью -F, затем

find /export/home/testing -type f -name apache_logs.txt -exec tail -n 50 {} \; |
/usr/xpg4/bin/grep -vF -f avoid.txt >result.txt

... где avoid.txt— текстовый файл со строкой в ​​каждой строке:

akamai/sureroute
/wp7/wp-login.php
HTTP/1.0" 200
HTTP/1.1" 200

Это будет искать обычные файлы с именем apache_logs.txtв каталоге /export/home/testingили в нем. Для каждого такого файла вызывается tail -n 50, чтобы получить последние 50 строк (в соответствии с вашим кодом; используйте catвместо tail -n 50, чтобы получить все содержимое каждого файла ).

Полученные строки текста передаются по конвейеру через /usr/xpg4/bin/grep, который отфильтровывает (удаляет )каждую строку, содержащую любую из подстрок, перечисленных в файле avoid.txt.

С параметром grepиспользуются следующие параметры:

  • -vинвертировать смысл совпадения (возвращать строки не соответствующие шаблону ).
  • -Fдля обработки каждого шаблона как строки и выполнения сравнения строк, а не сопоставления с регулярным выражением. Это позволяет шаблонам в файле содержать символы, которые в противном случае были бы специальными в регулярных выражениях, без их экранирования.
  • -f avoid.txtдля чтения паттернов из файла avoid.txt.

Остальные строки текста записываются в result.txt.

Без опции -Fвам пришлось бы быть немного осторожнее с шаблонами в avoid.txtи сделать их правильными регулярными выражениями. Может что-то вроде

akamai/sureroute
/wp7/wp-login\.php
HTTP/1\.[01]" 200

Если вы ожидаете, что ваш findнайдет только отдельный файл , код можно упростить до

tail -n 50 /path/to/apache_logs.txt |
/usr/xpg4/bin/grep -vF -f avoid.txt >result.txt

Есть несколько проблем с вашим кодом:

  • Вы не цитируете расширения переменных. См. . Когда необходимо двойное -цитирование?
  • Вы напрасно сохраняете результат конвейера в переменной, а затем используете echoдля вывода результата в файл.
  • Ваш первый конвейер tail+ grepиспользует $fileс обеих сторон канала.Это заставит grepигнорировать ввод от tail.
  • Ваш второй (более длинный )конвейер будет использовать result1.txtтолько для последнего grep, а более ранние grepкоманды будут ожидать чтения данных из стандартного ввода (их не будет )и в конце концов будет убит, когда будет выполнено последнее grep.

    Конвейер такого типа обычно выглядит так

    command inputfile | command | command | command
    

    т. е. вы начинаете с команды, которая считывает данные из некоторого входного файла и записывает их в стандартный вывод. Вывод читается следующей командой, а ее вывод считывается следующей командой и так далее.

  • Выходной файл, result.txt, перезаписывается с нуля для каждого найденного apache_logs.txtфайла, так как вы записываете в него, используя >в цикле. Это может быть нормально, если вы ожидаете, что findнайдет только один файл (, и в этом случае было бы лучше вообще не использовать find, так как файл, по-видимому, не будет перемещаться в файловой системе )..

  • Вы анализируете выводfind(пути к найденным файлам )с помощью read. Как правило, это плохая идея, так как пути в Unix могут содержать любой символ, включая символ новой строки и обратную косую черту, за исключением символа nul (\0), который является ограничителем строки в языке программирования C. См. Почему зацикливание вывода find является плохой практикой?

Также связанные:

2
28.01.2020, 02:29

Теги

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