Подтвердить что ты не робот

Отображение только n-го совпадения grep

onefish
onechicken
twofish
twochicken
twocows
threechicken

Что делать, если я хочу grep для строк, содержащих "два", но мне нужно только 2-го совпадения. Поэтому я хочу, чтобы результат был "двумя".

4b9b3361

Ответ 1

попробуйте следующее:

awk '/two/{i++}i==2' file

с вашими данными:

kent$  echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken

note: если ваш файл огромен, сделайте следующее:

awk '/two/{i++}i==2{print; exit}' file

Ответ 2

grep -m2 "two" in-file.txt | tail -n1

Остановитесь после второго совпадения, затем произведите печать второй строки.

Ответ 3

Если слово (здесь слово == два) повторяет несколько раз в одной строке, и вы хотите напечатать эту строку, используйте ниже:

word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile 

например. Для ввода ниже:

onefish
onechicken
twotwofish
twochicken
twocows
threechicken

он напечатает twotwofish вместо twochicken.

Возможно, это не то, что хочет пользователь1787038, но добавил, чтобы ответить на мои собственные комментарии.

Ответ 4

Следует отметить, что если строки threechicken и twocows были заменены, aka:

onefish
onechicken
twofish
twochicken
threechicken
twocows

то первый ответ Кента (awk '/two/{i++}i==2' file) даст выход:

twochicken
threechicken

потому что для увеличения счетчика требуется другое совпадение совпадения. Его последний ответ: awk '/two/{i++}i==2{print; exit}' file избегает этой проблемы.

Ответ 5

grep и sed могут использоваться для фильтрации номера строки.

testfile:

onefish
onechicken
twofish
twochicken
threechicken
twocows

Получение нужной строки:

grep "two" testfile | sed -n 2p
prints "twochicken"

grep "two" testfile | sed -n 1p
prints "twofish"