problema di sintassi grep su Lion

0

Ho un file di testo e cerco la riga singola bird . Utilizzo di OS X Lion e grep 2.5.1.

funziona:

grep '^bird' file.txt

ma questo non è

grep '^bird$' file.txt

Non c'è uno spazio vuoto alla fine della linea. Che cosa sto facendo di sbagliato?

thx

    
posta timpone 18.01.2012 - 19:51
fonte

3 risposte

5

Solitamente a causa di un file di testo formattato DOS (CRLF). Per pulire il file è possibile installare un tooö come dos2unix ; ma di solito funziona ancora più semplice utilizzando lo strumento tr :

tr -d '\r' < testfile > output.txt
    
risposta data 18.01.2012 - 20:37
fonte
4

Suppongo che sia un file CRLF (dos texted file di testo)

[bob@erasmas tmp]$ cat testfile
bird
notbird
[bob@erasmas tmp]$ cat testfile.dos
bird
notbird
[bob@erasmas tmp]$ file testfile
testfile: ASCII text
[bob@erasmas tmp]$ file testfile.dos
testfile.dos: ASCII text, with CRLF line terminators
[bob@erasmas tmp]$ grep '^bird' testfile
bird
[bob@erasmas tmp]$ grep '^bird' testfile.dos
bird
[bob@erasmas tmp]$ grep '^bird$' testfile
bird
[bob@erasmas tmp]$ grep '^bird$' testfile.dos

Nota: questo era su una macchina Linux, in quanto non è specifico per OS X (se questo è effettivamente il problema).

Esegui "file" su file.txt e verifica se ha terminazioni di riga CRLF.

    
risposta data 18.01.2012 - 20:13
fonte
1

Se si desidera mantenere la formattazione MS-DOS, è possibile inserire il ritorno a capo di MS-DOS all'interno del pattern. Su linux premo CTRL-V CTRL-M per produrre il% letterale^M che rappresenta il CR MS-DOS (talvolta indicato come \r ). Spero che su OS X troverai come produrre il CR letterale.

grep --color=none "^bird^M$"
    
risposta data 18.01.2012 - 22:58
fonte

Leggi altre domande sui tag