Я хочу , чтобы искать имена файлов с регулярным выражением, и Grep его с помощью регулярных выражений. Я попробовал это:

find .  -name co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'

Но это не работает. Что я делаю неправильно?

3 ответа3

0

Разве вы не хотите, чтобы паратезы в выражении grep или где они только там, так как вы думали, что они нужны для функциональности регулярного выражения?

Похоже, вы могли бы делать то, что вы хотите с помощью grep напрямую:

grep -R --include='co_on*eruo*' '0LF2C Comdty.*20111022.*'

Возможно, вы хотите, чтобы -name охватывал также имена каталогов - это не так. Дайте больше информации о точных путях, если вы хотите найти решение для этого.

0
find .  -regex co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
0

Прежде всего, как именно это не работает?

Вам нужно заключить шаблон в кавычки (примечание: это не регулярное выражение), чтобы оболочка не расширила его:

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 .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .