2015-01-10 4 views
2

Есть ли способ, чтобы выбрать только те строки из текстового файла, который исключает подстроку Например, у меня есть файл:Исключить строку из регулярного выражения

I have a /apple 
I have a peach 
I have a cucumber/strawberry 
ABCDE 
I have a apple/grape 
XYZEF 
POLSD 

и я хочу, чтобы выбрать строки, которые начинаются с «у меня есть», но не включает в строку «apple'.So в основном я хочу, чтобы выбрать только:

I have a peach 
I have a cucumber/strawberry 
+1

Какое приложение или язык программирования? Если вы используете 'grep', у него есть опция' -v', которая печатает строки, которые не совпадают. – Barmar

+1

В более общем плане вы можете использовать негативный просмотр. – Barmar

ответ

0

Вы должны использовать регулярное выражение„начинается с“с многострочным флагом, как это: "^У меня есть. *"/gm.

+1

Я думаю, что вы, возможно, неправильно поняли вопрос, так как это действительно не помогает OP. –

1

Используйте трубу:

grep '^I have a' file.txt | grep -v apple 
3

Используйте отрицательный предпросмотр.

^I have a (?!.*\bapple\b).+ 

будет соответствовать всем строкам «У меня есть», кроме тех, которые содержат все слово «яблоко». Это все равно будет соответствовать фразе

I have a pineapple 

из-за границы слова вокруг «яблоко».

0

Для чистого раствора регулярного выражения, вы можете использовать что-то вроде:

^I have a (?!.*apple) - Примечание: Вы можете также добавить \b границы слова вокруг «яблока», как Jongware предложил, если вы не хотите, чтобы соответствовать вещам как «ананас».

Однако гораздо более простой способ сделать это (особенно если проблема была немного сложнее!) Состояла бы в объединении поиска первого шаблона с поиском, исключающим второй шаблон.

С grep, как предлагает Дэнни Даглас, вы можете сделать grep '^I have a' file.txt | grep -v apple (где grep -v является «обратным grep»).

Однако вы хотели сделать это в текстовом редакторе, что достаточно справедливо. Точный метод, очевидно, варьируется между текстовыми редакторами, но, например, для Vim check out this excellent stackoverflow answe r.

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