Как напечатать номер строки, в которой строка отображается в файле?
У меня есть определенное слово, и я хотел бы узнать, какой номер строки в моем файле появляется это слово.
Это происходит в скрипте оболочки 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