Mam plik, w którym chcę grep dla linii, które zaczynają się od -rwx lub drwx I zakończyć w dowolnej liczbie.Grep dla początku i końca linii?
Mam to, ale to nie jest w porządku. Jakieś pomysły?
grep [^.rwx]*[0-9] usrLog.txt
Mam plik, w którym chcę grep dla linii, które zaczynają się od -rwx lub drwx I zakończyć w dowolnej liczbie.Grep dla początku i końca linii?
Mam to, ale to nie jest w porządku. Jakieś pomysły?
grep [^.rwx]*[0-9] usrLog.txt
Najtrudniejszą częścią jest wyrażenie regularne, które zawiera myślnik jako jeden z poprawnych znaków w klasie znaków. Deska musi nadejść natychmiast po starcie dla (normalnej) klasy postaci i zaraz po karetce dla zignorowanej klasy postaci. Jeśli potrzebujesz również kwadratowego wspornika, musisz zamknąć kwadratowy wspornik, a następnie myślnik. Na szczęście wystarczy odrobinę, stąd wybrana notacja.
grep '^[-d]rwx.*[0-9]$' "[email protected]"
Patrz: Regular Expressions i grep dla POSIX standardowych szczegółów.
Prawdopodobnie chcesz egrep. Spróbuj:
egrep '^[d-]rwx.*[0-9]$' usrLog.txt
Wygląda na to, że były na dobrej drodze ... The ^
charakter mecze rozpoczynających-of-line, a $
mecze end-of-line. Wzorzec Jonathana będzie działać dla ciebie ... po prostu chciałem dać ci wyjaśnienie za nim
Jednak nie do końca na właściwym tropie. Ważne jest, aby zauważyć, że znaki wewnątrz klasy znaków [] 'zachowują się znacząco inaczej niż w innych częściach wyrażenia regularnego. – ephemient
Czy przetwarzasz dane wyjściowe ls -l
?
Jeśli jesteś, a ty po prostu chcesz dostać nazwę pliku
find . -iname "*[0-9]"
Jeśli nie masz wyboru, bo usrLog.txt tworzony jest przez coś/kogoś innego i absolutnie trzeba użyć tego pliku, inne opcje obejmują
awk '/^[-d].*[0-9]$/' file
Ruby (1.9+)
ruby -ne 'print if /^[-d].*[0-9]$/' file
atakujących
while read -r line ; do case $line in [-d]*[0-9]) echo $line; esac; done < file
Należy zauważyć, że nie tylko karetka (^) zachowuje się inaczej w nawiasach klamrowych, ale będzie miała przeciwny skutek umieszczenia jej poza nawiasami. Umieszczenie karetki tam, gdzie ją masz, spowoduje wyszukanie wszystkich napisów NIE zaczynających się od treści umieszczonej w nawiasach. Również chciałbyś umieścić kropkę przed gwiazdką pomiędzy nawiasami, tak jak w grep, działa ona również jako "wieloznacznik".
grep ^[.rwx].*[0-9]$
To powinno działać dla ciebie, zauważyłem, że niektóre plakaty używane klasę postaci w ich ekspresji, która jest skuteczną metodą, jak również, ale nie używali każdy w swojej oryginalnej ekspresji więc staram się uzyskać jeden tak blisko Ciebie jak to możliwe, wyjaśniając każdą drobną zmianę po drodze, aby była lepiej zrozumiana. Jak możemy nauczyć się czegoś innego?
Lub 'grep -x '[-d] rwx. * [0-9]''. – ephemient
W systemie Linux, tak - lub w przypadku użycia GNU grep. Wersja, którą zacytowałem, będzie działała na wszystkich wersjach Uniksa, które przesyłam, czyni ją lepszą. –
'-x' jest POSIX. Bracket następujący po kresce: '[[.-.] [.].]]' (Co, przyznane, jest mniej czytelne niż '[] -]'). Ja * wierzę * to jest również POSIX ... – ephemient