如何丰富我的 bash 单行代码以获取默认值

如何丰富我的 bash 单行代码以获取默认值

我在一个综合脚本中有一行代码:

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

现在我想在单行代码不输出任何内容时获得默认输出 (fe "NA")。我该如何丰富我的单行代码来实现这个愿望?

多谢

沃尔特

答案1

你的管道可以折叠成一个单一的 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

相关内容