我想递归地在多个文件中搜索一个字符串。
我以前使用过grep,它可以正常工作。
grep -r SearchString。
但是我听说awk快得多。所以我使用下面的命令,但是它只是打印出文件上的所有内容?
awk 'If ($0 ~/SearchString/) {print $0} ' /path/*
您的假设有些偏离。 Awk是一种旨在处理一组预定义文件的工具。因此,它对递归文件处理不了解。
在一个文件上,一个将为o:
awk '/regex/' file1 file2
这将打印文件[1]和[文件2]与regex
匹配的所有行。但是,这可能不是您想要的,因为与grep -E 'regex' file1 file2
相比,它不会为您提供任何信息,即哪一行属于哪个文件。为此,您已经需要开始添加东西,使awk不太舒服:
awk '/regex/{print FILENAME,":",$0}' file1 file2
如果要递归,则需要为此使用find
:
find . -type f -print0 | xargs -0 awk '/regex/{print FILENAME":", $0}'
您能不能尝试以下操作。
var="searchstring" ##This is a shell/bash variable.
awk -v var="$var" 'index($0,var)' /complete/path/of_files/*
[假设您有一个名为var
的shell变量,它具有实际的字符串值,我们将其值传递给名为awk
的var
变量,稍后使用index
的awk
函数将查看变量是否为进入任何行,因为我们没有提到任何动作,所以只要index
值不为空(表示匹配),就会打印该行。