Фильтровать файл с выводом другой команды

Вы можете написать сценарий для циклического переключения имен хостов и использовать opensslдля проверки сертификатов.

Пример вbash:

for host in host1.example.com host2.example.com host3.example.com ; do
    echo ===== $host =====
    openssl s_client -connect $host:443 < /dev/null 2> /dev/null \
      | openssl x509 -noout -text \
      | grep "Subject Alternative Name" -A2
done
0
06.08.2020, 16:31
4 ответа

Я бы использовалawk:

<myfile check_this | awk '
  !check_processed {if ($1 == "YES") yes[FNR]; next}
  FNR in yes' - check_processed=1 myfile

awkзаписывает, какие номера строк вывода check_thisначинаются со слова YESв хеш-таблице yes, а затем печатает строки myfile, номера которых находятся в этой хэш-таблице yes.

2
18.03.2021, 23:14

Вариантом отличногоawk-решения @StéphaneChazelas, которое менее компактно, но, возможно, его легче читать, поскольку оно не обращается к внешней переменной(check_processedв его нотации ), будет:

$ awk 'FNR == NR {if ($1 == "YES") yes[FNR];next} 
       FNR != NR && FNR in yes'   <(check_this <myfile) myfile

Примечание.:@RakeshSharma отмечает, что одновременное использованиеnext(1-й строки )и тестаFNR != NR(2-й строки )является избыточным. Пользователи этого шаблона могут удалить один или другой без изменения вывода, как в:

$ awk 'FNR == NR {if ($1 == "YES") yes[FNR];next} 
       FNR in yes'   <(check_this <myfile) myfile
0
18.03.2021, 23:14

Мы можем использовать GNUверсию утилиты dc , чтобы в основном реализовать grep -fфункциональность.

dc -e "
$(< myfile check_this | sed -e 's/NO/0/;s/YES/1/' | tac)
[q]sq [p]sp [?z0=qr1=psxz0<?]s?
l?x
" < <(< myfile sed -e 's/.*/[&]/')
  • В качестве первого шага мы загружаем выходные данные утилиты check_this, соответствующим образом логически (YES=>1, NO=>0 )и помещаем их в стек. Следующая строка из входного файла считывается и помещается в стек.выведите его, если 2-й элемент стека равен 1.

  • Затем мы очищаем 2 верхних элемента стека. Повторяйте до eof.

0
18.03.2021, 23:14

GNU awk, он же gawk+paste:

$ < myfile check_this \
   | paste myfile -      \
   | gawk '/YES$/ && NF--';
$ < myfile check_this \
    |  perl -lpe '
      @ARGV && do{
        /YES/ && $h{$.}++;
        eof && close(ARGV);
        next;
       };
        print if $h{$.};
  ' - myfile

GNU sed с включенным режимом extended regex:

$ < myfile check_this |
    sed -nE '
        1{:a;H;n;/^(YES|NO)$/ba;}
        G;/\n\nYES/P
        s/.*\n\n(YES|NO)/\n/;h
    ' - myfile

сохранить проверку _этого вывода в состоянии удержания и в каждой строке myfile определить, что начальное значение для удержания равно да. Затем напечатайте строку myfile. Вырежьте два ведущих элемента из пространства шаблона и повторно -сохраните (НЕ «восстановите» )шаблон в удерживаемом пространстве.

0
18.03.2021, 23:14

Теги

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