我很难过。如何使用GREP命令读取文件中的多行。这是我迄今为止所做的工作,但只读取文件中的一行。如果我添加另一行说它无法读取....我正在使用Linux shell。在过去的两天里,我一直试图研究这个,但仍然没有。任何帮助都会受到欢迎。感谢。
(
echo;echo -ne "Checking Firewall INPUT chain for entry ... ";
if ! iptables -vnL INPUT | grep `cat $_file` >/dev/null ; then
echo "Not Found!"
for IP in `cat $_scriptpath/tmp/badip.cache`
do
iptables -A INPUT -s $IP -j badipblock
done
echo External IP : $IP has been banned! $_DATE > $_scriptpath/log/badip_fw_$_DATE.log
else
echo "Entry already exists"
fi
echo;
)
答案 0 :(得分:2)
grep -f "$_file"
...会将$_file
的每一行视为一种模式,并匹配这些模式的任何。 (通常的标志可用于修改这些模式的解释方式 - ERE为-E
,固定字符串为-F
等。
直接原因是:
grep `cat $_file`
在这个看似无害的代码中,您实际上正在执行以下操作:
$_file
中找到的字符的变量IFS
的内容(默认为空格,制表符和换行符)拆分为多个单词cat
。cat
尝试打开一个为每个单词命名的文件(除非它们以短划线开头,在这种情况下它会将它们视为选项标志)并将它们的输出连接在一起。grep
的命令行 ......那么,那又是什么呢?我们假设cat
的输出只评估为一个单词foo
:
grep foo
...所以,我们在stdin流中寻找foo
。相反,让我们说它评估为两个单词foo
和bar
:
grep foo bar
这样做完全不同:它将foo
视为要搜索的字符串 - 但它将bar
视为要搜索的文件的名称,忽略您作为标准输入管道传输的任何内容。
有些参考资料可供参考:
for