我创建了一个ugrep命令和文件
ugrep -Hn -e 'Error:XX234 - \S+\.txt : cannot find user' -e 'Error:XX235 - \S+\.pdf : cannot find data' --format='%f:%n:%o%~' *
文件内容
1_Error0: rwPqdEPE.txt - YjTccJITSpALx1B8cORN
ErrorXX235 - xyz.pdf : cannot find data
Error:XX235 - xyz.pdf : cannot find data
Error:XX234 - abc.txt : cannot find user
输出
我期待以下输出:
上面只是一个示例 ugrep 命令。我的实际命令会像下面这样很大
ugrep -Hn -e pattern1 -e pattern2 -e patternN --format='%f:%n:%o%~' *
预期产量
issue.txt:12:Error:XX235 - xyz.pdf : cannot find data:<pattern2>
issue.txt:13:Error:XX234 - abc.txt : cannot find user:<patternN>
检查
ugrep
手册页。
参见
和ugrep --help format
部分man ugrep
了解详情。 当指定选项FORMAT
时,选项-o
也已启用。 上下文选项-u
、-A
、-B
和-C
将被忽略。-y
我没有找到任何方法来包含匹配的
regexp
模式与 --format
选项。
另一种解决方案,
awk
,
此脚本从第一个文件中读取正则表达式并将其应用于其余文件。
# regexp.awk
BEGIN {
# Read regular expressions from the first file
while ((getline line < ARGV[1]) > 0) {
regexps[++i] = line
}
# Remove the first file from the list of files to be processed
ARGV[1] = ""
}
{
# Apply each regular expression to each line of each file
for (j = 1; j <= i; ++j) {
if ($0 ~ regexps[j]) {
print FILENAME ":" FNR ":" $0 ":" regexps[j]
}
}
}
您可以使用以下命令运行此
awk
脚本:
awk -f regexp.awk regexp_file.txt [target_files_list...]
在此命令中,将
"regexp_file.txt"
替换为包含正则表达式的文件的名称,将 target_files_list
替换为要搜索的文件的名称。该脚本将在一行中打印每个匹配项,格式为 filename:linenumber:matched line regular expression
。
这是一个简单的解决方案,如果您有大量正则表达式或大文件,则可能无法正常工作。如果性能是一个问题,您可能需要更复杂的解决方案。