从管道中逐行读取自己的函数,同时将整个文件作为一个实体接近

时间:2014-03-26 11:02:17

标签: linux bash pipe

是否可以逐行读取管道,并且可以将整个文件作为一个实体访问,同时对grep说?

function()
{ 
while read data 
do
# processing line by line, using $data 
grep "string" WHOLE_FILE | ...
# processing 
done
}

cat some_file | function | ...

谢谢

2 个答案:

答案 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