如何解决带有重定向的tee bash命令
我有以下文件:
file1.txt
geek
for
geeks
我正在使用tee
命令对输出执行两项操作。我的问题是关于第一个tee
之后的重定向字符。我想获取file1.txt的第一列,然后
将其写入file2.txt。当我运行以下命令时,我没有收到错误,但没有显示第一列:
wc -l file1.txt |tee awk '{print $1}' - > file2.txt | sed 's/4/6/g' > file3.txt
但是,以下命令可以正常工作。 >
在这里做什么?
wc -l file1.txt |tee >(awk '{print $1}' - > file2.txt) | sed 's/4/6/g' > file3.txt
解决方法
tee awk '{print $1}' - > file2.txt
这样做:
- 使用3个自变量
tee
和awk
和'{print $1}'
执行-
。 -
tee
将创建一个名为awk
的文件,另一个名为'{print $1}'
的文件和另一个名为{{1}的文件}。 - 然后,
-
的输出将重定向到tee
-
file2.txt
将输入重复到这3个文件,并将输出到tee
- 因此,
file2.txt
将不会收到任何输入,因为| sed
的输出将重定向到该文件,并且子shell不会输出任何内容。
tee
这样做:
-
tee >(awk '{print $1}' - > file2.txt)
- 使用两个参数
>(...)
和awk
运行'{print $1}'
- ------
-
被解释为脚本 - ------
'{print $1}'
被解释为stdin(可以省略) - ------然后将
-
的输出重定向到awk
- 然后
file2.txt
创建一个fifo或bash
文件 - 然后将该文件的输出连接到
/dev/fd/something
进程的stdin - 然后
awk
被替换为文件名,{em>最可能被替换为>(awk ...)
- 使用两个参数
-
/dev/fd/something
- 使用一个参数执行tee,例如
tee >(...)
-
tee /dev/fd/something
已连接到另一端的awk进程 - 因此
/dev/fd/something
写入tee
,而/dev/fd/something
从另一侧的stdin读取数据 -
awk
的输出重定向到tee
- 使用一个参数执行tee,例如
>在这里做什么?
第一次出现是用来引入过程替换。第二次出现用于将| sed
命令的输出重定向到名为awk
的文件。第三次出现用于将file2.txt
命令的输出重定向到名为sed
的文件。
在这里,进程替换用于捕获通常会进入文件的输出
用于写入进程的Bash语法为>(command)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。