是否可以逐行读取管道,并且可以将整个文件作为一个实体访问,同时对grep说?
function()
{
while read data
do
# processing line by line, using $data
grep "string" WHOLE_FILE | ...
# processing
done
}
cat some_file | function | ...
谢谢
答案 0 :(得分:3)
不含蓄,但
{ echo some_file; cat some_file; } | function | ...
与
function () {
read filename
while read data; do
grep "string" $filename | ...
done
}
应该做你想做的事。
如果标准输入直接连接到文件,您可以在readlink
(在Linux中)等文件上使用/proc/self/fd/0
来获取在标准输入上打开的文件的名称。但是,标准输入可能来自管道,管道可能来自直接写入管道的任意程序,而不是实际文件。
答案 1 :(得分:1)
您可以将该功能实现为
foo() {
while read data; do
grep "$data" $1
done < $1
}
并像这样使用
foo filename