首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grep $value `grep $value2 `<command>`` -嵌套grep?

Grep $value `grep $value2 `<command>`` -嵌套grep?
EN

Stack Overflow用户
提问于 2014-02-22 03:20:31
回答 2查看 3.5K关注 0票数 3

我在awk/sed是个彻头彻尾的菜鸟,所以如果我错过了一些显而易见的东西,请原谅我。

基本上,我试图做一个嵌套的grep,即类似于:

代码语言:javascript
复制
grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)`

细目:

代码语言:javascript
复制
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!多亏了你们,我的剧本才有用!在这里,它还未完成,但仍在发挥作用:

代码语言:javascript
复制
#!/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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-22 03:40:12

代码语言:javascript
复制
grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)`

这不对。backticks (`command`)和$(command)做同样的事情,它只是另一种语法。使用$()的优点是它具有更好的可嵌套性,所以总是使用它是一个好习惯。

所以,让我们来解决这个问题,我们现在结束于:

代码语言:javascript
复制
grep "$value" "$(exim -Mvh "$(exim -bpru | grep "$eximID")")" | more

我重新定位了more命令,因为我认为这是显而易见的原因。more只是为用户分页数据,将more的输出提供给其他几乎没有意义的东西。

我还引用了变量,这也是一个好习惯,因为否则当变量中有某些字符(最常见的是a空间)时,事情就会中断。

我不能测试这是否给出了您想要的输出,如果没有,那么就用几行示例数据来更新您的答案,以及预期的输出。

票数 4
EN

Stack Overflow用户

发布于 2014-02-22 03:47:00

如果您要使用回引号(不推荐;这是很辛苦的工作)来完成,那么您必须编写:

代码语言:javascript
复制
grep $value `exim -Mvh $(\`exim -bpru | grep $eximID\`)`

(从那时起,我就删除了more,它的行为类似于cat,在命令末尾使用cat也没有任何意义)。

在整个过程中使用$(…)表示法会更明智:

代码语言:javascript
复制
grep $value $(exim -Mvh $( $(exim -bpru | grep $eximID)))

似乎更有道理的是,你不需要太多的间接,这就是你真正想要的:

代码语言:javascript
复制
grep $value $(exim -Mvh $(exim -bpru | grep $eximID))

你应该看看:

毫无疑问,还有其他相关的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21949194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档