O problema são as terminações de linha DOS / Windows no seu arquivo de origem.
Observe que o primeiro comando abaixo aparece para produzir linhas em branco, enquanto o segundo não:
$ grep -r '.*html5uploader.*'
$ grep -r '.*html5uploader.*' | hexdump -C
00000000 74 65 73 74 2e 63 74 70 3a 09 09 3c 73 63 72 69 |test.ctp:..<scri|
00000010 70 74 20 74 79 70 65 3d 22 74 65 78 74 2f 6a 61 |pt type="text/ja|
00000020 76 61 73 63 72 69 70 74 22 20 73 72 63 3d 22 2f |vascript" src="/|
00000030 6a 73 2f 6a 71 75 65 72 79 2e 68 74 6d 6c 35 75 |js/jquery.html5u|
00000040 70 6c 6f 61 64 65 72 2e 6d 69 6e 2e 6a 73 3c 3f |ploader.min.js<?|
00000050 3d 24 6e 6f 5f 63 61 63 68 65 3f 3e 22 3e 3c 2f |=$no_cache?>"></|
00000060 73 63 72 69 70 74 3e 0d 0a 74 65 73 74 2e 63 74 |script>..test.ct|
00000070 70 3a 09 09 09 24 28 22 23 73 63 72 65 65 6e 73 |p:...$("#screens|
00000080 68 6f 74 22 29 2e 68 74 6d 6c 35 75 70 6c 6f 61 |hot").html5uploa|
00000090 64 65 72 28 0d 0a |der(..|
00000096
Observe a sequência de bytes 0a 0d
no acima. Isso indica finais de linha do DOS / Windows.
O texto a seguir produz o texto desejado:
$ tr -d '\r' <test.ctp | grep '.*html5uploader.*'
<script type="text/javascript" src="/js/jquery.html5uploader.min.js<?=$no_cache?>"></script>
$("#screenshot").html5uploader(
$("#screenshot").html5uploader(
Assim, o problema é que o arquivo de origem, test.ctp, possui terminações de linha DOS / Windows que, quando uma linha completa é impressa, fazem com que a saída seja sobrescrita.
Use tr -d '\r'
ou um dos convenientes utilitários dos2unix
para corrigir os arquivos.
Para uma discussão sobre quais editores podem ser usados para evitar esse problema, consulte " Quais editores de texto lidam com quebras de linha tanto no estilo Windows quanto no estilo Unix? "