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

Нумерация строк, соответствующих шаблону с помощью sed

Я пишу script, который ищет строки, соответствующие шаблону. Я должен использовать sed для этого script. Это отлично подходит для поиска и печати согласованных строк:

sed -n /PATTERN/p

Тем не менее, я также хотел бы напечатать соответствующий номер строки перед самой линией. Как я могу это сделать с помощью sed?

4b9b3361

Ответ 1

Вы можете использовать grep:

grep -n pattern file

Если вы используете = в sed, номер строки будет напечатан на отдельной строке и недоступен в пространстве шаблонов для манипуляции. Однако вы можете передать вывод в другой экземпляр sed для объединения номера строки и строки, к которой она применяется.

sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'

Ответ 2

= используется для печати номера строки.

sed -n /PATTERN/{=;p;}

Ответ 3

Для sed используйте следующую команду, чтобы получить номер строки

sed -n /PATTERN/= 

Ответ 4

Переключитесь на awk.

BEGIN {
  ln=0
}

$0 ~ m {
  ln+=1
  print ln " " $0
  next
}

{
  print $0
}

...

awk -f script.awk -v m='<regex>' < input.txt

Ответ 5

Использование Perl:

perl -ne 'print "$.: $_" if /regex/' input.file

$. содержат номер строки. Если входной файл содержит:

record foo
bar baz
record qux

Этот однострочный: perl -ne 'print "$.: $_" if /record/' input.file будет печатать:

1: record foo
3: record qux

Или, если вы просто хотите, чтобы общее количество строк соответствовало шаблону:

perl -lne '$count++ if /regex/; END { print int $count }' input.file

Ответ 6

Вот простейший способ:

awk '{print ln++  ":  "  $0 }'