Usando o filtro grep

1

Eu tenho um arquivo de texto com o nome "hello.txt" que contém as seguintes duas linhas:

Hello WORLD!
Hallo world!

Quando escrevi o seguinte

grep -i h[ae]llo hello.txt 

no terminal, a saída não foi nada. Eu esperava a impressão das duas linhas.

    
por Altaïr 14.04.2015 / 22:43

1 resposta

1

É possível que algum tipo de problema no conjunto de caracteres esteja jogando coisas para você. Aqui estão alguns comandos que você deve usar para recriar um uso bem-sucedido de grep que possa ajudá-lo.

Primeiro, vamos criar um arquivo de texto no terminal para evitar problemas no conjunto de caracteres:

echo -e "Hello\nHallo" > foo.txt

O sinal -e informa echo que queremos que o \n seja interpretado como uma nova linha e não a sequência literal. Isso nos dá duas linhas. Você deve poder cat o arquivo e vê-lo sem nenhum problema, como este:

cat foo.txt
Hello
Hallo

Agora você pode usar o comando grep que você postou antes (ele realmente não precisa de aspas, mas você deve usá-las, pois há caracteres especiais no bash. Além disso, as aspas não são aspas duplas)

grep -i 'h[ae]llo' foo.txt

Isso produz o resultado esperado. Se isso funcionou para você, mas você está curioso para saber o que está acontecendo com o seu outro arquivo de texto, você pode fazer algumas coisas para descobrir o que está acontecendo.

Primeiro, tente executar o comando file no arquivo. Isso deve dizer que é um arquivo de texto e em qual codificação ele parece estar.

file foo.txt
foo.txt: ASCII text

Se você obtiver algo estranho ou em uma codificação de caracteres diferente, isso será um problema. Você também pode inspecionar o despejo hexadecimal do arquivo por:

hexdump -C foo.txt

00000000  48 65 6c 6c 6f 0a 48 61  6c 6c 6f 0a              |Hello.Hallo.|
0000000c

Além disso, como bônus, há um emulador Linux no navegador que pode ser usado para ajudar você a brincar:

link

Ele ainda tem o GCC, então você pode compilar o código C!

    
por 15.04.2015 / 00:56