У меня в комплексном сценарии это одна строка:

grep -P -o "(?s)description\".+>" ./Hlinks.html \
  | grep -P -o "(?s)ISBN[^:]{0,1}: {0,1}[-0-9X]+[ \|]*" \
  | perl -p -e  "s/ISBN[^:]*:*|[\|| ]//g"
  | sed -n "/.*/p;1q"  > ./nISBN.txt

Теперь я хотел бы получить вывод по умолчанию (например, «NA»), когда однострочник ничего не выводит. Как я могу обогатить мой однострочник, чтобы получить это желание?

большое спасибо

Вальтер

1 ответ1

0

Ваш конвейер может быть свернут в один скрипт perl, так как perl может делать все, что может делать grep и sed. Что-то вроде

perl -nE '
    $found = 0;
    if (/description\".+>/ && /ISBN[^:]?:\s*([-0-9X]+[ \|]*)/) {
        $found = 1;
        say $1;
    }
    END {say "N/A" unless $found}
' ./Hlinks.html  > ./nISBN.txt

grep это линейно-ориентированный инструмент, поэтому я не уверен (?s) на самом деле делает что-нибудь для вас.

Делая шаг назад, вы должны использовать анализатор HTML для этих данных: регулярные выражения просто недостаточно мощны для анализа HTML -> https://stackoverflow.com/q/4598162/7552

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .