Mam kilka dużych plików tekstowych, aw pliku UNIQS.txt
mam listę ciągów znaków grep
z innego pliku. Kod, którego używam to
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
który nic nie robi - wygenerowany plik jest pusty. Ale kiedy robię
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
działa poprawnie. Wprawia mnie to w zakłopotanie, ponieważ nie sądziłem, grep
że zinterpretuję te wpisy UNIQS.txt
jako wzorce wyrażeń regularnych bez cudzysłowów i ukośników itd. W pliku (którego nie ma). Czy ogólnie jest tak, że jeśli pobierasz wzorce z pliku, automatycznie pomyśli, że są wzorcami regularnymi?
Edycja: W UNIQS.txt
pliku znajdują się ciągi oddzielone znakiem nowej linii
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(zwane nazwami szablonów) i EEP_VSL...
kolumnami pliku oddzielonymi kartami, z około 14 kolumnami, a pierwsza kolumna to nazwa szablonu, więc w zasadzie chcę wyodrębnić linię odpowiadającą każdemu szablonowi w pliku.
-x
-F
flagi. Domyślam się,-
że powyższy wiersz próbki powoduje, że jest to odczytywane jako ciąg znaków? Czy nie wymagałoby to również nawiasów kwadratowych? Testowałem z niektórymi przykładowymi plikami, ale nie doszedłem do wniosku.-F
. Zrobiłoby to różnicę w przypadku postaci takich jak\[*^$
.-F
flagi?Miałem ten sam błąd, który nie został rozwiązany dzięki dobrej odpowiedzi z @ gilles. Przyglądając się bliżej w pliku wejściowym, na końcu znalazłem 2 znaki nowej linii. Bez nich sukces wymagałby tylko: grep -i file_pattern_input plik
(GNU grep 3.1, plik wejściowy ponad 5000 rekordów, plik dopasowania / wzorca 2536, wiedziałem, że wszystkie 2536 muszą znajdować się w pliku. Dzięki nowym wierszom wszystkie linie pliku i tylko 2536 pasujących linii)
źródło