我正在尝试使用find进行搜索并将结果传递给grep。 Grep必须找到与string1和string2以及string3匹配的文件。
我有以下命令:
#/bin/bash
searchpath="/home/myfolder"
string1="abc"
string2="def"
string3="ghi"
find `echo "${searchpath}"` -type f -print0 | xargs -0 grep -l -E '"${string1}".*"${string2}".*"${string3}"'
但结果是空白的,但是当我这样做时:
find /home/myfolder -type f -print0 | xargs -0 grep -l -E 'abc.*def.*ghi'
我得到了结果。我做错了什么?
答案 0 :(得分:2)
从行中删除单引号:
find `echo "${searchpath}"` -type f -print0 | xargs -0 grep -l -E '"${string1}".*"${string2}".*"${string3}"'
即,说:
find "${searchpath}" -type f -print0 | xargs -0 grep -l -E "${string1}".*"${string2}".*"${string3}"
会奏效。当您用单引号括起来时,shell会将其解释为:
"${string1}".*"${string2}".*"${string3}"
(不扩展变量)
而且,你不需要说
`echo "${searchpath}"`
说
"${searchpath}"
就足够了。