grep пойдет быстрее с разрывами строки?

Команда выполняется в каждом каталоге, который содержит подобранный файл. С тех пор c не содержит каталог, он не соответствует и таким образом не будет выполнен туда.

Решение состоит в том, чтобы добавить имя каталога к execdir аргументу, как так:

find . -type d -execdir touch {}/foo \;
2
06.08.2014, 00:42
2 ответа

, вам, вероятно, следует просто использовать fmt или fold или pr или одну из них. Вот fmt:

until [ $((i=i+1)) -gt 10000 ]
do  printf %s\  words and more words
done | fmt

OUTPUT

words and more words words and more words words and more words words
and more words words and more words words and more words words and more
words words and more words words and more words words and more words
words and more words words and more words words and more words words
and more words words and more words words and more words words and more
#...and so on for a long time

grep буфер обязательно уступит место при любой серьезной нагрузке, если только он не сможет сбросить его на границу новой строки.

Например:

time (
    tr \\0 \\n < /dev/zero | 
    sed 'c words and words and words and words and words and' | 
    tr -d \\n | 
    grep -o words
)
grep: memory exhausted
49.42s user 44.93s system 229% cpu 41.070 total

Это занимает некоторое время - но на этой системе много пустой оперативной памяти, и все же она умудрилась сломаться меньше чем за минуту.

Так что просто:

fmt <file | grep search

Более надежно, если в файле есть какой-то надежный односимвольный разделитель строк:

tr ${delim} \\n <file | grep search
3
27.01.2020, 21:57

grep определенно работает на основе строки, как и собака. Это не обязательно ускорит поиск, но вывод для совпадающей строки должен быть более быстрым.

.
2
27.01.2020, 21:57

Теги

Похожие вопросы