具有可变子shell数的Bash子shell输入

具有可变子shell数的Bash子shell输入,bash,io-redirection,subshell,Bash,Io Redirection,Subshell,我想从数量可变的日志文件中删除grep行,并将它们的输出连接到paste。如果我有固定数量的输出,我可以这样做: paste <(grep $PATTERN $FILE1) <(grep $PATTERN $FILE2) paste您可以通过组合find命令来列出文件,并使用xargs将其输出传送到grep,以确保grep应用于find命令中列出的每个文件 $ find /dir/containing/files -name "file.*" | xargs grep $PATTE

我想从数量可变的日志文件中删除
grep
行,并将它们的输出连接到
paste
。如果我有固定数量的输出,我可以这样做:

paste <(grep $PATTERN $FILE1) <(grep $PATTERN $FILE2)

paste您可以通过组合
find
命令来列出文件,并使用
xargs
将其输出传送到grep,以确保grep应用于
find
命令中列出的每个文件

$ find /dir/containing/files -name "file.*" | xargs grep $PATTERN

使用显式命名管道,而不是进程替换

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

Grep将接受一个文件列表,也许通配符可以满足您的需要?您可以使用管道append
>
附加到文件,因此删除输出,然后在循环中运行grep,每个grep都附加到文件中?但这不会将每个
grep
的输出用作
粘贴的输入文件。