Como posso enriquecer meu bash one-liner para obter um valor padrão

0

Eu tenho em um script abrangente este one-liner:

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

Agora eu gostaria de obter uma saída padrão (por exemplo, "N.A") quando o one-liner não produz nada. Como posso enriquecer meu one-liner para obter esse desejo?

Muito obrigado

Walter

    
por Walter Schrabmair 09.12.2016 / 15:17

1 resposta

0

Seu pipeline pode ser recolhido em um único script perl, já que o perl pode fazer tudo o que o grep e o sed podem fazer. Algo como

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

O grep é uma ferramenta orientada a linhas, por isso não tenho certeza se o (?s) está realmente fazendo qualquer coisa por você.

Dando um passo para trás, você deve usar um analisador de HTML nesses dados: expressões regulares simplesmente não são poderosas o suficiente para analisar HTML - > link

    
por 09.12.2016 / 16:23