以递归方式搜索字符

问题描述 投票:0回答:2

我想递归地在多个文件中搜索一个字符串。

我以前使用过grep,它可以正常工作。

grep -r SearchString。

但是我听说awk快得多。所以我使用下面的命令,但是它只是打印出文件上的所有内容?

awk 'If ($0 ~/SearchString/) {print $0} ' /path/*
search awk grep
2个回答
0
投票

您的假设有些偏离。 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}'

-1
投票

您能不能尝试以下操作。

var="searchstring" ##This is a shell/bash variable.
awk -v var="$var" 'index($0,var)' /complete/path/of_files/*

[假设您有一个名为var的shell变量,它具有实际的字符串值,我们将其值传递给名为awkvar变量,稍后使用indexawk函数将查看变量是否为进入任何行,因为我们没有提到任何动作,所以只要index值不为空(表示匹配),就会打印该行。

© www.soinside.com 2019 - 2024. All rights reserved.