如何解决grep 的管道输出作为 bash 脚本的参数
script.sh
将两个文件作为参数,并调用 Python 脚本打开它们并对这些文件进行进一步处理:
script.sh file1.txt file2.txt
我想从 file1.txt 中删除所有以 # 开头的行。
grep -v '^#' file1.txt
我尝试了以下但失败了:
script.sh $(grep -v '^#' file1.txt) file2.txt
如何将 grep 的输出作为 script.sh 的第一个文件参数通过管道传输?
解决方法
script.sh <(grep -v '^#' file1.txt) file2.txt
命令替换$()
,会将grep 命令的输出逐字插入script.sh
的参数。相反,引用 bash 手册页:
进程替换允许使用文件名引用进程的输入或输出。它采用 (list) 的形式。进程列表异步运行,其输入或输出显示为文件名。这个文件名作为扩展的结果作为参数传递给当前命令。
和
如果使用
所以,我的理解是,当您使用 $()
时,grep 命令的输出将替换为最终语句,结果如下:
script.sh contents of file1 without comments \n oops newline etc file2.txt
但是当您使用 <()
时,会运行 grep 命令并且输出进入命名管道或临时文件或其他等效文件,并且该“文件”的名称被替换到您的语句中,因此您结束与
script.sh /dev/fd/temp_thing_containing_grep_results file2.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。