Eu tenho um arquivo de entrada no seguinte formato:
something here
somethingElseHere^[%-somestuff here
^[%-somestuff here
Observe que ^[
é o caractere de escape \x1b
.
Então, o que estou tentando fazer é excluir tudo no arquivo após a primeira ocorrência de ^[
, em um script bash, então devo acabar com algo assim:
something here
somethingElseHere
Minha solução foi: awk -F "\x1b" {'print $1'}
, mas isso é uma saída:
something here
somethingElseHere
(empty line here)
Então, está adicionando uma linha extra vazia após a última. Ainda assim, se eu excluir manualmente, recebo um byte extra. Fiz um programa C ++ que lê o arquivo até o caractere \x1b
e grava todos os caracteres lidos em um arquivo separado, mas com o AWK, depois de excluir a linha extra, ainda consigo 1 byte a mais do que fazê-lo com C ++.
Editar:
talvez seja o caractere EOL adicionado ao usar o AWK? Eu não o adiciono ao usar o programa C ++.
ATUALIZAÇÃO:
Acabei de experimentar alguns dos comandos, e a maioria deles funciona se eu os abrir em vi
, mas eles ainda têm um byte extra e não consigo descobrir de onde vem.
$hexdump -x file1
0000000 4329 706f 7279 6769 7468 6328 2029 3931
0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f
0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766
0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776
0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020
0000050 3130 a8f8 4955 0a42
0000058
$hexdump -x file2
0000000 4329 706f 7279 6769 7468 6328 2029 3931
0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f
0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766
0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776
0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020
0000050 3130 a8f8 4955 0042
0000057
No arquivo1, que é o que estou gerando com o bash, ele adiciona um 0x0a
(caractere de nova linha) extra.