我想从可变数量的日志文件中插入grep
行,并将其输出与paste
连接。如果我有固定数量的输出,则可以这样:
paste <(grep $PATTERN $FILE1) <(grep $PATTERN $FILE2)
但是有一种方法可以使用可变数量的输入文件吗?我想编写一个shell脚本,其参数是输入文件。 Shell脚本应paste
从所有脚本中复制grepped行。
答案 0 :(得分:0)
使用显式命名管道,而不是进程替换。
pipes=()
for f in "$FILE1" "$FILE2" "$FILE3"; do
n="$(mktemp)" # Or some other command to create a temporary name
mkfifo "$n"
pipes+=( "$n" )
grep "$PATTERN" "$f" > "$n" &
done
paste "${pipes[@]}"
rm "${pipes[@]}" # When done with them
答案 1 :(得分:-1)
您可以通过组合find
命令来列出文件并使用xargs
将其输出传递到grep来确保grep被应用到find
命令中列出的每个文件上来实现
$ find /dir/containing/files -name "file.*" | xargs grep $PATTERN