如果patterns每行包含一个模式,则可以执行以下操作:
awk 'NR==FNR{a[$0];next}{for(i in a)if($0!~i)next}1' patterns -
或匹配子字符串而不是正则表达式:
awk 'NR==FNR{a[$0];next}{for(i in a)if(!index($0,i))next}1' patterns -
要在输入patterns为空的情况下打印所有输入而不是不输入任何行,请替换NR==FNR为FILENAME==ARGV[1],或替换为ARGIND==1in gawk。
这些函数打印STDIN的行,其中包含指定为参数的每个字符串作为子字符串。ga代表grep all,gai忽略大小写。
ga(){ awk 'FILENAME==ARGV[1]{a[$0];next}{for(i in a)if(!index($0,i))next}1' <(printf %s\\n "$@") -; }
gai(){ awk 'FILENAME==ARGV[1]{a[tolower($0)];next}{for(i in a)if(!index(tolower($0),i))next}1' <(printf %s\\n "$@") -; }