У меня есть файл, где я хочу grep для строк, начинающихся с -rwx или drwx И заканчивается в любом количестве.Grep для начала и конца строки?
У меня есть это, но это не совсем правильно. Есть идеи?
grep [^.rwx]*[0-9] usrLog.txt
У меня есть файл, где я хочу grep для строк, начинающихся с -rwx или drwx И заканчивается в любом количестве.Grep для начала и конца строки?
У меня есть это, но это не совсем правильно. Есть идеи?
grep [^.rwx]*[0-9] usrLog.txt
Сложная часть представляет собой регулярное выражение, которое включает тире как один из допустимых символов в символьном классе. Черточка должна прибыть сразу после начала для (нормального) класса символов и сразу после каретки для отрицательного класса символов. Если вам нужна и квадратная скобка, то вам нужно закрыть квадратную скобку, а затем тире. К счастью, вам нужна только тире, поэтому выбранная нотация.
grep '^[-d]rwx.*[0-9]$' "[email protected]"
См: Regular Expressions и grep для POSIX-стандартных деталей.
Возможно, вы захотите egrep. Попробуйте:
egrep '^[d-]rwx.*[0-9]$' usrLog.txt
Похоже, что вы были на правильном пути ... The ^
характер матчей, начиная-линии, и $
матчи конца-строки. Образец Джонатана будет работать на вас ... просто хотел дать вам объяснение позади него
Не совсем на правильном пути. Важно отметить, что символы внутри символьного класса '[]' ведут себя значительно иначе, чем в других частях регулярного выражения. – ephemient
Вы анализируете вывод ls -l
?
Если вы, и вы просто хотите, чтобы получить имя файла
find . -iname "*[0-9]"
Если у вас нет выбора, потому что usrLog.txt создается что-то/кто-то еще, и вы обязательно должны использовать этот файл, другие варианты включают в себя
awk '/^[-d].*[0-9]$/' file
Рубин (1.9+)
ruby -ne 'print if /^[-d].*[0-9]$/' file
Bash
while read -r line ; do case $line in [-d]*[0-9]) echo $line; esac; done < file
Следует отметить, что каретка (^) не только ведет себя по-разному в скобках, она будет иметь противоположный результат размещения ее вне скобок. Размещение каретки, где у вас есть, будет искать все строки НЕ начиная с содержимого, которое вы разместили в скобках. Вы также хотели бы разместить период перед звездочкой между вашими скобками, как с grep, а также действовать как «подстановочный знак».
grep ^[.rwx].*[0-9]$
Это должно работать для вас, я заметил, что некоторые плакаты использовали класс символов в своих выражениях, является эффективным методом, как хорошо, но вы не используете какой-либо в исходном выражении, так что я пытаюсь получить один как можно ближе к вашему, объясняя каждое незначительное изменение на этом пути, чтобы оно было лучше понято. Как мы можем учиться иначе?
Или 'grep -x '[-d] rwx. * [0-9]''. – ephemient
В Linux, да - или где используется GNU grep. Версия, которую я цитировал, будет работать на всех вариантах Unix, которые я бы представил, делает ее лучше. –
'-x' - POSIX. Скобка после тире: '[[.-.] [.].]]' (Которая, предоставленная, менее читаема, чем '[] -]'). Я * верю * это тоже POSIX ... – ephemient