Сравним все предложенные решения!
У меня есть текстовый файл test.txt
размером ~230M. Я на Mac Mini, обновлён до 10.10.
1) awk
решение от Hauke Laging (лучше не...):
$ time bash -c "awk '/a/ && /b/ && /c/' >> /dev/null"
19.51 real 19.23 user 0.20 sys
2) "bruteforced" grep
от Raghuraman R и Hauke Laging (лучше, но не совсем..... ):
$ time bash -c "grep -e 'a.*b.*c' -e 'a.*c.*b' -e 'b.*a.*c' -e 'b.*c.*a' -e 'c.*a.*b' -e 'c.*b.*a' test.txt >> /dev/null"
10.02 real 9.93 user 0.07 sys
3) прикованный grep
от muru (хорошо!):
$ time bash -c "grep a test.txt | grep b | grep c >> /dev/null"
1.61 real 3.08 user 0.29 sys
4) perl
решение от terdon (еще лучше!):
$ time bash -c "perl -ne 'print if /a/ && /b/ && /c/' test.txt >> /dev/null"
0.83 real 0.75 user 0.07 sys
Так что, я думаю, что "прикованный grep" это нормально, но вы также можете использовать Perl для еще большей производительности.
Я не смог протестировать подход sed
, потому что программа, предоставляемая Costas, не работает "как есть" в консоли mac os.
Кстати, я не эксперт по бенчмаркингу, извините, если я сделал что-то не так.
Мне нужно было изменить скорость синхронизации на такую, которая совместима с моим KVM.