我在一个综合脚本中有一行代码:
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