Я хочу , чтобы искать имена файлов с регулярным выражением, и Grep его с помощью регулярных выражений. Я попробовал это:
find . -name co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
Но это не работает. Что я делаю неправильно?
Разве вы не хотите, чтобы паратезы в выражении grep
или где они только там, так как вы думали, что они нужны для функциональности регулярного выражения?
Похоже, вы могли бы делать то, что вы хотите с помощью grep
напрямую:
grep -R --include='co_on*eruo*' '0LF2C Comdty.*20111022.*'
Возможно, вы хотите, чтобы -name
охватывал также имена каталогов - это не так. Дайте больше информации о точных путях, если вы хотите найти решение для этого.
find . -regex co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
Прежде всего, как именно это не работает?
Вам нужно заключить шаблон в кавычки (примечание: это не регулярное выражение), чтобы оболочка не расширила его:
find . -name 'co_on*eruo*' | xargs grep '0LF2C Comdty(.*)20111022(.*)'
РЕДАКТИРОВАТЬ
Но если это действительно должно быть регулярное выражение (т. Е. Вы хотите сопоставить "co_o", то ноль или более "n", затем "eru", затем ноль или более "o"), тогда, как Тим говорит, что вам нужно использовать -regex
вместо -name
. (Вероятно, это особенность GNU; если find --version
не говорит что-то вроде find (GNU findutils) 4.4.2
, то ваш find
может не поддерживать -regex
.)