无需中间文件即可对标准输入的不同部分进行操作

无需中间文件即可对标准输入的不同部分进行操作

有没有一种简单的方法可以通过重定向或管道来执行此操作而不创建 FILE1?我想将 process2 应用于 process1 的输出正文,而不触及第一行和最后几行。

process1 >FILE1
head -n 3 FILE1
tail -n +4 FILE1|head -n -4|process2 # producing output
tail -n 4 FILE1
rm -f FILE1

答案1

我认为你可以通过管道处理它们:处理 process1 中的每一行,除了第一行和最后一行,比如说 3 行:

process1 | tail -n +4 | head -n -3 | process2

答案2

不确定这应该实现什么,但这里有一个解决方案,可以完全完成你正在做的事情,而无需使用中间文件:

#!/bin/bash

# prevent LF from being removed
export IFS=' '

output=`process1`
echo $output | head -n 3

echo $output | tail -n +4 | head -n -4 | process2 # producing output
echo $output | tail -n 4

相关内容