Próbuję wyszukać wiersze zaczynające się od „1” za pomocą
ls -1 | grep ^1*
ale zwraca wiersze, które nie zaczynają się od 1. Czego tu brakuje?
Próbuję wyszukać wiersze zaczynające się od „1” za pomocą
ls -1 | grep ^1*
ale zwraca wiersze, które nie zaczynają się od 1. Czego tu brakuje?
ls
wyjście, napotkasz problemy, jeśli nazwy plików zawierają dziwne znaki, takie jak znaki nowej linii ... Wiele innych poleceń (w jakiś sposób niels
, przynajmniej wersja, którą muszę sprawdzić) mają opcję rozdzielania wartości zerowej, którą następnie można bezpiecznie przetwarzać za pomocągrep -z
Odpowiedzi:
Twoje wyrażenie regularne nie znaczy, co myślisz. Dopasowuje wszystkie linie rozpoczynające się od (^) z jednym (1) powtórzeniem zero lub więcej (*) razy. Wszystkie ciągi pasują do tego wyrażenia regularnego.
grep '^1'
robi co chcesz.źródło
Próbowałeś następujących rzeczy?
Oznacza to, że usuń
*
, co w zasadzie mówigrep
, znajdź zero lub więcej wystąpień^1
wyrażenia. Innymi słowy: dopasuj linie rozpoczynające się od 1 lub nie.źródło
Chociaż to nie odpowiada na twoje pytanie, jest to lepsze rozwiązanie tego, co wydaje się twoim celem:
Możesz użyć globu powłoki, aby wyświetlić listę wszystkich plików, które zaczynają się od
1
. Zauważ, że*
ma inne znaczenie w globowaniu powłoki niż wyrażenia regularne.źródło
*
jest symbolem wieloznacznym oznaczającym „0 lub więcej dowolnych znaków”. Znaczenie wyrażenia regularnego wyjaśniono w odpowiedzi otokana.^ 1. * dopasowuje całą linię, lub tak jak powiedziano powyżej, ^ 1 ma łańcuch zawarty w linii.
różne style wyrażeń regularnych używają różnych symboli reprezentujących znaki, niektóre opcje określają, który styl chcesz. a różne opcje określają, czy chcesz dopasować cały wiersz, czy tylko jego część, czy cały wpis jako jeden ciąg.
źródło