使用命令替换时出现意外的 grep 行为

使用命令替换时出现意外的 grep 行为

grep我正在尝试使用命令替换来查找并打印出包含 base64 编码字符串的所有文件。

如果我首先对 base64 字符串进行编码,然后使用 grep,我就可以找到该文件:

$ echo "FLAG" | base64
RkxBRwo=

$ grep -nr "Rkx"
test.txt:1:RkxBR3tUaGl6STVUaDNGbDRnfQo=

但是当我使用命令替换时,我没有得到任何输出。

$ grep -nr `echo "FLAG" | base64`

答案1

Steeldriver 将答案作为评论发布,因此我将其作为答案发布。  echo "FLAG" | base64 输出RkxBRwo=,所以你的

grep -nr `echo "标志" | grep -nr `echo "FLAG" | grep -nr `echo "FLAG" base64`
命令正在执行
grep -nr RkxBRwo=
但是,根据您所显示的内容,您的test.txt文件不包含RkxBRwo=;它包含RkxBR(后跟其他字符)。

如果您想在文件中搜索 的 base64 编码的前 5 个字符FLAG,请执行以下操作

grep -nr `echo "标志" | grep -nr `echo "FLAG" | grep -nr `echo "FLAG" 64 位 |切-c1-5`

答案2

命令

grep -nr `echo "FLAG" | base64`

表示在当前目录中的所有文件中递归搜索命令返回的模式echo "FLAG" | base64

相反,我相信你想要

echo "FLAG" | base64 | grep -n 'Rkx'

或者,如果出于某种原因您需要命令替换:

grep -n 'Rkx' <<< $(echo "FLAG" | base64)

$()请注意,使用表达式而不是反引号来进行命令替换。这就是原因。

相关内容