Você provavelmente deve usar apenas fmt
ou fold
ou pr
ou um desses. Aqui está 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
O buffer de grep
está fadado a ceder sob qualquer carga séria, a menos que possa despejá-lo em um limite de nova linha.
Por exemplo:
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
Demora um pouco - mas tem muita memória RAM vazia neste sistema e ainda conseguiu quebrar em menos de um minuto.
Então apenas:
fmt <file | grep search
Mais robustamente, porém, se houver algum delimitador de cadeia de caracteres único confiável no arquivo:
tr ${delim} \n <file | grep search