problem ze składnią grep na Lion

0

Mam plik tekstowy i szukam pojedynczej linii bird. Korzystanie z OS X Lion i grep 2.5.1.

to działa:

grep '^bird' file.txt

ale to nie

grep '^bird$' file.txt

Na końcu linii nie ma pustego miejsca. Co ja robię źle?

dzięki

opóźnienie
źródło
Pracuje dla mnie. Tylko jeden bardzo długi strzał: przeszukujesz enable1.txtwariant 1 i file.txtwariant 2.
Sven
wygląda na to, że CRLF zaktualizowano do file.txt

Odpowiedzi:

5

Jest to zwykle spowodowane formatowaniem pliku tekstowego DOS (CRLF). Aby wyczyścić plik można zainstalować TOOO jak dos2unix; ale zwykle działa jeszcze łatwiej, używając trnarzędzia:

tr -d '\r' < testfile > output.txt
Mattias Ahnberg
źródło
Zgadzam się, że powinno działać prawie wszędzie.
4

Domyślam się, że jest to plik CRLF (plik tekstowy w formacie dos)

[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

Uwaga: To było na komputerze z systemem Linux, ponieważ nie jest to specyficzne dla systemu OS X (jeśli to jest właśnie problem).

Uruchom „plik” na file.txt i sprawdź, czy ma on zakończenia linii CRLF.

rjewell
źródło
to jest sedno. file.txt: ASCII c program text, with CRLF line terminators- każdy pomysł, jak to sprawdzić. wygląda na to, że grep powinien sobie z tym poradzić ...
wygląda na to, że tak się stałosed 's/.$//' file.txt > fixed.txt
2
To oświadczenie usuwa KAŻDY znak na końcu wiersza, który może przypadkowo wyczyścić zbyt wiele, jeśli masz pecha. Ale jak zawsze w * NIX; mnóstwo sposobów, aby zrobić to samo. Zobacz moją odpowiedź poniżej, aby poznać inny sposób jej oczyszczenia. :)
1

Jeśli chcesz zachować formatowanie MS-DOS, możesz wstawić znak powrotu karetki MS-DOS we wzorcu. W ^Msystemie Linux naciskam CTRL-V CTRL-M, aby utworzyć literał reprezentujący MS-DOS CR (czasami oznaczany jako \r). Mam nadzieję, że na OS X dowiesz się, jak wyprodukować dosłowne CR.

grep --color=none "^bird^M$"
olibre
źródło