如何使用我的下一个参数的前一个输出来 grep 一个字符串?
How do I grep a string using the previous output for my next argument?
文件中有一个以 4bceb 开头且长度为 32 个字符的字符串。
为了找到它,我尝试了以下
输入:
find / -type f 2>/dev/null | xargs grep "4bceb\w{27}" 2>/dev/null
输入命令后,脚本似乎正在等待其他命令。
你的命令原则上似乎没问题,即它应该为每个文件 find
returns 正确执行 grep
命令。但是,我不相信您的正则表达式(分别是您调用 grep 的方式)对于您想要实现的目标是正确的。
首先,为了使您的表达式起作用,您需要通过指定 -P
标志来告诉 grep
您正在使用 Perl 语法。
其次,您的正则表达式将 return 包含以“4bceb”开头的序列的完整行 至少 32 个字符长,但 也可能更长。例如,如果您的 ./test.txt
文件内容是
4bcebUUUUUUUUUUUUUUUUUUUUUUUU31
4bcebVVVVVVVVVVVVVVVVVVVVVVVVV32
4bcebWWWWWWWWWWWWWWWWWWWWWWWWWW33
sometext4bcebYYYYYYYYYYYYYYYYYYYYYYYYY32somemoretext
othertext 4bcebZZZZZZZZZZZZZZZZZZZZZZZZZ32 evenmoretext
您的输出将包括除第一行以外的所有行(其中序列短于 32 个字符)。如果您实际上想将结果限制为仅包含恰好 32 个字符长的序列的行,则可以将 -w
标志(对于 word-regexp)与 grep
一起使用,这只会 return 上例中的第 2 行和第 5 行。
第三,如果您只需要匹配而不需要周围的文本,grep
标志 -o
就可以做到这一点。
最后,您不需要将 find
输出通过管道传输到 xargs
,因为 grep
可以直接执行您想要的操作:
grep -rnPow / -e "4bceb\w{27}"
将递归地 (-r
) 扫描从 /
和 return 开始的所有文件,只扫描包含匹配词的文件,以及匹配项(以及它们的行号)被发现,作为标志 -n
):
./test.txt:2:4bcebVVVVVVVVVVVVVVVVVVVVVVVVV32
./test.txt:5:4bcebZZZZZZZZZZZZZZZZZZZZZZZZZ32
文件中有一个以 4bceb 开头且长度为 32 个字符的字符串。 为了找到它,我尝试了以下
输入:
find / -type f 2>/dev/null | xargs grep "4bceb\w{27}" 2>/dev/null
输入命令后,脚本似乎正在等待其他命令。
你的命令原则上似乎没问题,即它应该为每个文件 find
returns 正确执行 grep
命令。但是,我不相信您的正则表达式(分别是您调用 grep 的方式)对于您想要实现的目标是正确的。
首先,为了使您的表达式起作用,您需要通过指定 -P
标志来告诉 grep
您正在使用 Perl 语法。
其次,您的正则表达式将 return 包含以“4bceb”开头的序列的完整行 至少 32 个字符长,但 也可能更长。例如,如果您的 ./test.txt
文件内容是
4bcebUUUUUUUUUUUUUUUUUUUUUUUU31
4bcebVVVVVVVVVVVVVVVVVVVVVVVVV32
4bcebWWWWWWWWWWWWWWWWWWWWWWWWWW33
sometext4bcebYYYYYYYYYYYYYYYYYYYYYYYYY32somemoretext
othertext 4bcebZZZZZZZZZZZZZZZZZZZZZZZZZ32 evenmoretext
您的输出将包括除第一行以外的所有行(其中序列短于 32 个字符)。如果您实际上想将结果限制为仅包含恰好 32 个字符长的序列的行,则可以将 -w
标志(对于 word-regexp)与 grep
一起使用,这只会 return 上例中的第 2 行和第 5 行。
第三,如果您只需要匹配而不需要周围的文本,grep
标志 -o
就可以做到这一点。
最后,您不需要将 find
输出通过管道传输到 xargs
,因为 grep
可以直接执行您想要的操作:
grep -rnPow / -e "4bceb\w{27}"
将递归地 (-r
) 扫描从 /
和 return 开始的所有文件,只扫描包含匹配词的文件,以及匹配项(以及它们的行号)被发现,作为标志 -n
):
./test.txt:2:4bcebVVVVVVVVVVVVVVVVVVVVVVVVV32
./test.txt:5:4bcebZZZZZZZZZZZZZZZZZZZZZZZZZ32