Как напечатать номер строки, в которой строка отображается в файле?

У меня есть определенное слово, и я хотел бы узнать, какой номер строки в моем файле появляется это слово.

Это происходит в скрипте оболочки C.

Я пытался поиграть с awk, чтобы найти номер строки, но до сих пор я не смог. Я также хочу присвоить этот номер строки переменной.

4 ответов


используя grep

искать word в файле и распечатать номер строки, используйте до grep:

grep -n 'word' file

это печатает как номер строки, так и строку, на которой он соответствует.

использование awk

это печатать номер строки, на которой слово word появляется в файле:

awk '/word/{print NR}' file

это напечатает как номер строки, так и строку, на которой word появляется:

awk '/word/{print NR, }' file

вы можете заменить word С любым регулярным выражением, которое вам нравится.

как работает:

  • /word/

    это выбирает строки, содержащие word.

  • {print NR}

    для выбранных строк выводится номер строки (NR означает номер записи). Вы можете изменить это, чтобы напечатать любую интересующую вас информацию. Таким образом, {print NR, } будет напечатать номер строки, затем саму строку .

присвоение номера строки переменной

использовать подстановку команд:

n=$(awk '/word/{print NR}' file)

использование переменных оболочки в качестве шаблона

предположим, что выражение, которое мы ищем, находится в переменной оболочки url:

awk -v x="$url" '~x {print NR}' file

и:

n=$(awk -v x="$url" '~x {print NR}' file)

Sed

вы можете использовать команду sed

 sed -n '/pattern/=' file

объяснение

на -n подавляет нормальный вывод, поэтому он не печатает фактические строки. Он сначала соответствует /pattern/, а потом = оператор означает печать номера строки. Обратите внимание, что это будет печатать все строки, содержащие шаблон.


используйте переменную NR

дан файл, содержащий:

foo
bar
baz

использовать встроенный переменная NR найти номер строки. Например:

$ awk '/bar/ { print NR }' /tmp/foo
2

найти номер строки, для которой первый столбец соответствует RRBS

awk 'i++ {if(~/RRBS/) print i}' ../../bak/bak.db