2015-06-11 4 views
0

Я хочу перечислить файлы, которые начинаются с числа и заканчиваются расширением «.c». Ниже приведена команда find, которая используется. Но, он не дает ожидаемый результат.Регулярное выражение в команде «Найти»

Команда:

find -type f -regex "^[0-9].*\\.c$" 
+0

'.' соответствует любому символу. Попробуйте '.]' Или '\ .' Также' -regex' соответствует полному пути, а не имени файла. – knittl

+0

Я уже пробовал это. Но это не работает – Mohan

+0

@Mohan As knittl сказал, что find не печатает только имя файла, поэтому что-то вроде этого будет работать: 'find -type f -regex '^ [.] [/] [0-9]. *. c'' – DBedrenko

ответ

1

Это потому, что регулярное выражение опция работает полный путь и вы указали только имя файла. Из man find:

-regex pattern 
     File name matches regular expression pattern. This is a match on the whole 
     path, not a search. For example, to match a file named './fubar3', you can use 
     the regular expression '.*bar.' or '.*b.*3', but not 'f.*r3'. 
     The regular expressions understood by find are by default Emacs Regular 
     Expressions, but this can be changed with the -regextype option. 

Попробуйте с этим:

find -type f -regex ".*/[0-9][^/]+\.c$" 

где вы явно искать строку, где «формат вашего файла следует любой строке, которая заканчивается с косой чертой»

UPDATE: Я сделал исправление для регулярного выражения , Я изменил .* в имени файла на [^\]+, как после «любая строка, которая заканчивается косой чертой», мы не хотим найти косую черту в этой части строки, потому что это будет не имя файла, а другой каталог!

ПРИМЕЧАНИЕ: согласующего .* может быть очень вредным ...

+0

спасибо bro , Он отлично работал. еще раз спасибо – Mohan

1

Просто используйте -name вариант. Он принимает образец для последнего компонента имени пути, как говорит доктор:

-name pattern 

     True if the last component of the pathname being examined matches 
     pattern. Special shell pattern matching characters (``['', 
     ``]'', ``*'', and ``?'') may be used as part of pattern. These 
     characters may be matched explicitly by escaping them with a 
     backslash (``\''). 

Итак:

$ find -type f -name "[0-9]*.c" 

должен работать.

Смежные вопросы