我正在寻找一种方法来使用grep搜索多个字符串但保持相同的顺序。所以,例如,如果我有这个命令:
egrep '(string1|string2|string3)' /some/file.txt
我可能会回来:
string2
string1
string3
取决于它们在文件中的顺序。我需要的是无论在文件中的哪个位置找到它们总是返回:
string1
string2
string3
如果没有找到,发现它什么也没有返回,但订单仍然保持不变:
string1
string3
答案 0 :(得分:3)
如果可以订购输出(即string1< string2< string3),您可以执行以下操作:
egrep '(string1|string2|string3)' /some/file.txt | sort
如果无法订购,或用三种不同的grep搜索它们:
egrep 'string1' /some/file.txt
egrep 'string2' /some/file.txt
egrep 'string3' /some/file.txt
或使用数组和for循环:
stringsToSearch=(string1 string2 string3)
for item in ${stringsToSearch[*]}
do
egrep '$item' /some/file.txt
done
答案 1 :(得分:1)
扫描一次,然后依次打印每个表达式的匹配项。如果输入匹配多个表达式,则会在匹配的第一个集合中列出。
我使用冒号作为表达分隔符;显然,你可以随意改变。
awk -v 'expr=string1:string2:string3' '
BEGIN { n=split(expr, e, /:/);
for(i=i; i<=n; ++i) m[i]="" }
{ for(i=1; i<=n; ++i) if ($0 ~ e[i]) {
m[i]=m[i] $0 ORS; next } }
END { for (i=1; i<=n; ++i) printf m[i] }' file
答案 2 :(得分:0)
如何一次一个地自动完成:
echo&#34; string1 string2 string3&#34; | xargs -n 1 -J%egrep%/some/file.txt