我想弄清楚我需要修改哪些文件;所以,我使用grep命令序列。我想找出哪些文件包含foo和bar。因此,我的命令是:
grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq
这个命令给我一个大的列表,如下所示:
pageABC.txt
pageBCD.txt
pageDEF.txt
我希望在emacs中打开此输出。所以我通常做的是:
emacs ` whatever_was_in_my_output `
此命令通常会打开所有文件
如果我试试
emacs `grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq `
Emacs甚至都不会开始。也许是因为使用了双重坟墓口音。
任何想法如何解决这个问题?
非常感谢,
d
答案 0 :(得分:5)
你忘了逃避内部命令替换:
emacs `grep foo \`grep bar * -l\` | awk -F':' '{print $1}' | sort | uniq`
在这种情况下,我通常更喜欢替代命令子语法,因为它更容易嵌套:
emacs $(grep foo $(grep bar * -l) | awk -F':' '{print $1}' | sort | uniq)
答案 1 :(得分:3)
避免使用bash中的反引号,并使用$(command)
来运行子命令。与反引号不同,它们可以正确嵌套。