具有可变子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
的输出用作粘贴的输入文件。