我在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 $eximID | more$value是我要找的字符串$eximID是我在exim -bpru中寻找的字符串(列出所有的进出口信息)不知道用awk/sed来完成我想要完成的事情是否会更容易,因此这个问题确实存在。
我试着使它尽可能清晰,但是嵌套嵌套很难哟。
编辑 Tada!多亏了你们,我的剧本才有用!在这里,它还未完成,但仍在发挥作用:
#!/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发布于 2014-02-22 03:40:12
grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)`这不对。backticks (`command`)和$(command)做同样的事情,它只是另一种语法。使用$()的优点是它具有更好的可嵌套性,所以总是使用它是一个好习惯。
所以,让我们来解决这个问题,我们现在结束于:
grep "$value" "$(exim -Mvh "$(exim -bpru | grep "$eximID")")" | more我重新定位了more命令,因为我认为这是显而易见的原因。more只是为用户分页数据,将more的输出提供给其他几乎没有意义的东西。
我还引用了变量,这也是一个好习惯,因为否则当变量中有某些字符(最常见的是a空间)时,事情就会中断。
我不能测试这是否给出了您想要的输出,如果没有,那么就用几行示例数据来更新您的答案,以及预期的输出。
发布于 2014-02-22 03:47:00
如果您要使用回引号(不推荐;这是很辛苦的工作)来完成,那么您必须编写:
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))你应该看看:
毫无疑问,还有其他相关的问题。
https://stackoverflow.com/questions/21949194
复制相似问题