Точно совпадать (и только) с шаблоном, который я указал в команде grep

1145
palswim

Обычно grep ищет все строки, содержащие совпадение с указанным шаблоном / параметром.

Я хотел бы соответствовать только шаблону (то есть не всей линии).

Итак, если файл содержит строки:

We said that we'll come. Unfortunately, we were delayed. Now, we're on our way. Didn't I say we'd come? 

Я хочу найти все сокращения, начинающиеся с «мы» (регулярное выражение:) we\'[a-z]+/i; Я ищу вывод:

we'll we're we'd 

Как мне это сделать (с помощью grep или другого инструмента командной строки Unix / Windows)?

3
Я заглянул на справочную страницу «grep»: http://linux.die.net/man/1/grep, и ничто не подсказало, что то, что вы хотите, возможно. Вы можете попробовать использовать «sed» или «awk». Если вы действительно любите приключения, даже напишите 2-5-строчный сценарий на PERL. Rolnik 13 лет назад 0

2 ответа на вопрос

3
Peter Eisentraut

Используйте -oопцию:

grep -E -i -o "we'[a-z]+" file.txt 

Обратите внимание, что это не всегда переносимо для всех grepреализаций.

Мой ** grep ** имеет его, так что это работает для меня! palswim 13 лет назад 0
0
John T

Я бы предпочел Perl для чего-то вроде этого:

#!/usr/bin/perl  use strict; use warnings;  open FH, "< parse.txt" or die $!;  while(<FH>) { while($_ =~ /\b(we\'\w+)\b/g) { print $1."\n"; } }  close FH; 

Введите текст:

Some text we're test we'll why we're. More text we'll we're. Test. 

Выход:

we're we'll we're we'll we're 
Вместо того, чтобы жестко кодировать имя файла, вы должны заставить его принимать имя файла в качестве аргумента и работать как фильтр. Кроме того, я считаю, что ФП хотел, чтобы регистр не учитывался. Dennis Williamson 13 лет назад 0
@ Денис, это был пример ... John T 13 лет назад 0