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

使用命令的输出作为grep参数

如何解决使用命令的输出作为grep参数

我正在尝试将另一个命令的输出用作grep参数(我认为此功能称为this)。但是问题是它不起作用,grep找不到任何条目

wakatana@ubuntu:~$ dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | grep  <(uname -mrs | awk '{print $2}')
wakatana@ubuntu:~$

但是当我第一次将其分配给变量时,它就可以工作了:

wakatana@ubuntu:~$ pattern=$(uname -mrs | awk '{print $2}')
wakatana@ubuntu:~$ dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | grep  $pattern
8222    linux-image-4.15.0-118-generic
12894   linux-headers-4.15.0-118-generic
64165   linux-modules-4.15.0-118-generic
165817  linux-modules-extra-4.15.0-118-generic

所需命令的输出如下

wakatana@ubuntu:~$ uname -mrs | awk '{print $2}'
4.15.0-118-generic

但是当我回显进程替换的结果时,我得到了:

wakatana@ubuntu:~$ echo  <(uname -mrs | awk '{print $2}')
/dev/fd/63

我做错了什么?

操作系统信息:

wakatana@ubuntu:~$ bash --version
GNU bash,version 4.4.20(1)-release (x86_64-pc-linux-gnu)
copyright (C) 2016 Free Software Foundation,Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY,to the extent permitted by law.

wakatana@ubuntu:~$ lsb_release -a
No LSB modules are available.
distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

wakatana@ubuntu:~$ uname -a
Linux ubuntu 4.15.0-118-generic #119-Ubuntu SMP Tue Sep 8 12:30:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

解决方法

您不想从与命令输出关联的流中读取数据,而是希望将命令的整个结果作为参数传递给另一个命令。所以你想要:

dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | grep "$(uname -mrs | awk '{print $2}')"

我做错了什么?

好吧,我想您错误地期望将进程替换替换为命令输出的 content ,而将其替换为单个与命令输出关联的文件名。要用该命令产生的输出替换命令,请使用命令替换。为了进一步研究,我建议bash manual process substitutionbash manual command substitution

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。