удалить строку и следующую, если выполнено условие

Один из вариантов в bash — сделать это путем перенаправления на процесс замены, что-то вроде этого:

./script.sh > >(sed 's/^/script: /') 2> >(sed 's/^/script (err): /' >&2)

Проблема в том, что вывод может быть не в порядке (, как упоминал Чарльз Даффи в комментарии ). Это также действительно раздражающе громоздко. Но вы можете сделать для него функцию-оболочку:

prefixwith() {
    local prefix="$1"
    shift
    "$@" > >(sed "s/^/$prefix: /") 2> >(sed "s/^/$prefix (err): /" >&2)
}
prefixwith "From script"./script.sh

Или сделать это еще проще, используя имя команды в качестве префикса:

prefixoutput() {
    local prefix="From ${1##*/}"
    "$@" > >(sed "s/^/$prefix: /") 2> >(sed "s/^/$prefix (err): /" >&2)
}
prefixoutput./script.sh
0
12.02.2020, 16:43
1 ответ

Я нашел решение с этим кодом:

awk '/COI-5P/{nr[NR]; nr[NR+1]}; NR in nr' oldfile > newfile

где

  • /COI-5P/{nr[NR]; nr[NR+1]}записать совпадающую строку и последующие
  • NR in nrвыбор и неявная печать записанных строк.
0
28.04.2021, 23:23

Теги

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