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
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
Odpowiedzi:
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
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.
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ć ...
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$"
enable1.txtwariant 1 ifile.txtwariant 2.