Tim*_*Tim 11 command-line pipe io-redirection cat
对于某些命令,可以将某些输入指定为 stdin 或命令行参数。
具体而言,假设command
可以采取stdin的输入和一个文件名作为命令行参数,并且command < myfile
,cat myfile | command
和command myfile
可以产生相同的结果。
例如,
当命令是sed
:
sed s/day/night/ <myfile >new
sed s/day/night/ myfile >new
cat myfile | sed s/day/night/ >new
Run Code Online (Sandbox Code Playgroud)
当命令是cat
:
cat < myfile
cat myfile
Run Code Online (Sandbox Code Playgroud)
该cat file | command
语法被认为是 的无用使用Cat
。在所有选项中,它会降低性能,因为它必须在内核中生成另一个进程。无论这在大局中可能是多么微不足道,它都是其他形式所没有的开销。这已经涵盖在以下问题中:我应该关心不必要的猫吗?
在其他两种形式之间,几乎没有性能差异。STDIN 是一个特殊的文件节点,进程必须像任何其他节点一样打开和读取它。传递文件名而不是 STDIN 只会让它打开一个不同的文件。
不同之处在于您正在寻找哪些功能/灵活性。
sed -i
就地编辑。(注意:因为这必须在幕后创建一个新文件,所以它不会比其他重定向提高性能,但这是一个方便的步骤。)sed [exp] < file1 file2
甚至sed [exp] < <(grep command)
。这个用例的详细信息可以在这个问题上找到:进程替换和管道