Управление выводом curl в Debian

Вы должны использовать awk вместо

awk '/ [0-9] {4} \. [0-9] {2} \. [0-9] {2} \. / {print "--------------------- \ n" $ 0; continue} / ^ / {print $ 0} '<"INPUTFILE"> "OUTPUTFILE"

в основном это работает в 2 этапа:

step1: / [0-9] {4} \. [0- 9] {2} \. [0-9] {2} \. / {print "--------------------- \ n" $ 0; continue}

означает: если он кэширует /4digits.2digits.2digits. / затем выведите «---...-- \ n», за которым следует соответствующая строка, и выполните цикл на следующей строке (= «продолжить»).

step2: / ^ / {print $ 0}

означает: если мы не совпали с указанным выше, то для всех остальных строк (т. Е. Совпадение с началом строки, поэтому даже пустая строка будет сопоставлена ), просто распечатайте эту строку.

0
16.04.2018, 02:21
2 ответа

Вам необходимо различать ошибки, которые видит curl, и ошибки, которые возвращает ваш http-сервер. Последние не являются ошибками для curl. Однако вы можете легко проверить код состояния http, добавив в ваш curl параметр

 -w '\n%{http_code}\n'

Это добавит к стандартному выводу заголовок HTTP, который равен 200 для OK. Итак, ваш perl может делать что-то вроде

my $curl_result = `curl -s -S -w '\n%{http_code}\n'... 2>/dev/null`;
my @lines = split(/\n/,$curl_result);
my $httpcode = $lines[-1];
if($httpcode eq 200){ print "ok\n"; }
else{ print "error\n"; }
0
28.01.2020, 04:25

Оператор обратной кавычки Perl вернет (в переменную результата $curl _)STDOUT команды, которую вы запускаете. STDERR из этой команды перенесет в вызывающую программу/терминал из ваш perl-скрипт --, возможно, на ваш экран, как если бы вы сами вызвали curl.

Чтобы захватить STDERR, вы должны (как вы начали воображать, )отбросить STDOUT или смешать их.

Вот пример удаления STDOUT и перенаправления STDERR в STDOUT, чтобы он (вместо «обычного» STDOUT )захватывался переменной perl:

my $curl_result = `curl... 2>&1 1>/dev/null`;

В качестве альтернативы можно объединить два:

my $curl_result = `curl... 2>&1`;

Я опустил середину основной команды curl, чтобы было понятно, какую часть я изменил. В первом примере STDERR изменяется так, чтобы он указывал на то место, где STDOUT в настоящее время указывает , а затем сообщает STDOUT, что он должен уйти. Во втором примере STDERR указывает на STDOUT, смешивая их.

0
28.01.2020, 04:25

Теги

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