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