当查询源是文件时,尝试使用grep输出字符串前的20个字符
问题的背景:我的文件包含许多长行文本,并且我试图在该文件中搜索字符串,并在感兴趣的字符串之前输出20个字符。为此,我使用以下参数grep -E -o ".{0,20}string"
,当我尝试任何给定的字符串时,该参数将起作用并给出正确的输出。
我现在面临的问题是尝试将其与grep中的-f
选项结合使用,因为我有许多查询包含在不同的文件中。
我找不到将。{0,20}修饰符添加到文本文件中包含的每个查询的正确方法。任何帮助都会很棒。
答案 0 :(得分:1)
输入示例(input.txt):
ezfnzjnefnzefnz
ezenfjznefnkz123hello
enzjfzeknzkabcworld
fzebkfzbejkfbzk
模式文件示例(pattern.txt):
hello
world
命令:
grep -Eo -f <(sed 's/^/.{0,3}/' pattern.txt) input.txt
输出:
123hello
abcworld
Sed命令仅在每个模式的开头添加.{0,3}
。当然,您可以使用其他方法来更新病毒码文件。
答案 1 :(得分:0)
请您尝试以下操作,仅对显示的示例进行测试。
awk 'FNR==NR{a[$0];next} {for(i in a){if(index($0,i)){val=index($0,i);print substr($0,val-3)}}}' pattern.txt input.txt
现在添加上述解决方案的非一个内衬形式。
awk '
FNR==NR{
a[$0]
next
}
{
for(i in a){
if(index($0,i)){
val=index($0,i)
print substr($0,val-3)
}
}
}
' pattern.txt input.txt