Sendmail отправляет все электронные письма, но некоторые из них не приходят

Вдохновленный отличным ответом @Stephen Kitts, я написал немного более общий сценарий для выполнения сопоставления блоков при наличии заданного начального и конечного шаблонов.

#!/usr/bin/awk -f
BEGIN {
    pstart=ARGV[1];
    pstop=ARGV[2];
    pmatch=ARGV[3];
    ARGV[1]=ARGV[4];
    ARGC=2;
}
$0 ~ pstart { block = $0; output = 0; next }
{ block = block "\n" $0 }
$0 ~ pmatch { output = 1 }
$0 ~ pstop && output { print block; output = 0 }

Использование:match_block START END MATCH [FILE]

./match_block '^ID' 'Configured Voltage' 'Location Tag: P1-DIMMD1' f

или

command |./match_block '^ID' 'Configured Voltage' 'Location Tag: P1-DIMMD1'

Спасибо, что предложили написать это как скрипт awk. Мой исходный сценарий оболочки был:

#!/bin/sh

[ -z "$4" ] && file="-" || file="$4"

awk \
  -v BLOCKSTART_PATTERN="$1" \
  -v BLOCKEND_PATTERN="$2" \
  -v BLOCKMATCH_PATTERN="$3" \
  '
  $0 ~ BLOCKSTART_PATTERN { block = $0; output = 0; next }
  { block = block "\n" $0 }
  $0 ~ BLOCKMATCH_PATTERN { output = 1 }
  $0 ~ BLOCKEND_PATTERN && output { print block; output = 0 }
  ' "$file"

Использование:match_block START END MATCH [FILE].
Если файл не указан, будет использоваться stdin.

В вашем случае:

command |./match_block '^ID' 'Configured Voltage' 'Location Tag: P1-DIMMD1'

или

./match_block '^ID' 'Configured Voltage' 'Location Tag: P1-DIMMD1' file
0
19.02.2021, 01:48
0 ответов

Теги

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