Bash Grep$value`Grep$value2`<;命令>;``-嵌套grep?
我在awk/sed是个彻头彻尾的笨蛋,所以如果我遗漏了一些明显的东西,请原谅我 基本上,我尝试做一个嵌套的grep,即类似于:Bash Grep$value`Grep$value2`<;命令>;``-嵌套grep?,bash,grep,nested,Bash,Grep,Nested,我在awk/sed是个彻头彻尾的笨蛋,所以如果我遗漏了一些明显的东西,请原谅我 基本上,我尝试做一个嵌套的grep,即类似于: grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)` 细分: grep $value IN COMMAND --> exim -Mvh (print exim mail headers) FROM RESULTS OF ---> exim -bpru | grep $exim
grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)`
细分:
grep $value IN COMMAND
--> exim -Mvh (print exim mail headers) FROM RESULTS OF
---> exim -bpru | grep $eximID | more
是我要查找的字符串$value
是我在exim-bpru中查找的字符串(列出所有exim内容)$eximID
#!/usr/bin/bash
echo "Enter the email address you want to search for + compare sender info via exim IDs."
read searchTarget
echo "Enter the target domain the email is coming from."
read searchDomain
#domanList is array for list of exim IDs needed
domainList=($(exim -bpru | grep "$searchDomain" | awk '{ print $3 }'))
for i in "${domainList[@]}"
do
echo "$(exim -Mvh $i | grep $searchTarget)"
#echo "$(grep $searchTarget $(exim -Mvh $i))"
done
这是不对的。backticks(`command`
)和$(command)
做了同样的事情,它只是一种替代语法。使用$()
的优点是它更易于嵌套,因此始终使用它是一个好习惯
那么,让我们来解决这个问题,我们现在以:
grep "$value" "$(exim -Mvh "$(exim -bpru | grep "$eximID")")" | more
我重新定位了more
命令,原因很明显more
只是为用户分页数据,将more
的输出提供给其他内容几乎毫无意义
我还引用了变量,这也是一个好习惯,因为如果变量中有某些字符(最常见的是a空格),那么情况就会发生变化
我无法测试这是否提供了您想要的输出,如果没有,则使用几行示例数据和预期输出更新您的答案。如果要使用反引号(不推荐;这是一项艰巨的工作),则您必须编写:
grep $value `exim -Mvh $(\`exim -bpru | grep $eximID\`)`
(在这里,我删除了more
,因为这样使用时,它的行为类似于cat
,在这样的命令末尾使用cat
也没有意义)
在整个过程中使用$(…)
符号更明智:
grep $value $(exim -Mvh $( $(exim -bpru | grep $eximID)))
更合理的是,你不需要太多的间接操作,这就是你真正想要的:
grep $value $(exim -Mvh $(exim -bpru | grep $eximID))
你应该看看:
毫无疑问,还有其他相关的问题。很难解释你所问的问题——举一些例子就好了。例如,向我们展示一些示例数据以及所需的输出是什么。也许可以使用管道执行您想要的操作。正如:
grep foo*| grep-v“需要忽略的东西”| grep-i potatoe
我认为它需要一个右括号)因为它们不是matching@user3317140是的,修好了。非常感谢。回答得好!最后一个问题。。。。为什么我试图纠正的剧本给了我:“grep:Only:无此文件或目录grep:one:无此文件或目录grep:message:无此文件或目录grep:can:无此文件或目录grep:be:无此文件或目录grep:list:无此文件或目录grep:at:无此文件或目录grep:one:无此文件或目录“编辑-在这之前的30秒里,我一直有‘eurika’的感觉,”@nom您的命令实际上看起来像:grep“$value”filename
,其中filename
是整个$()
命令替换,从脚本判断,这不是您想要的。我不太确定您的exim
命令输出的是什么,但您可能希望将grep添加到末尾,就像这样:exim-Mvh$(exim-bpru | grep“$searchDomain”)| grep“$searchTarget”
…请注意,exim希望如何通过ID显示主题的标题是一个问题。现在创建一个for循环来“单独”显示它们-编辑-足够有趣的是,在末尾添加grep不会返回任何内容,甚至不会返回错误:exim-Mvh$(exim-bpru | grep“$searchDomain”| awk“{print$3}”)| grep“$searchTarget”
grep $value $(exim -Mvh $(exim -bpru | grep $eximID))