微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

grep 的管道输出作为 bash 脚本的参数

如何解决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 举报,一经查实,本站将立刻删除。