Печатать диапазон строк из файла и включать номера строк

sed -i "s/01.00. *\"/\${версия}\"/g" file.json

Поиск линии до --с/01.00. *\"/ Замените на --/${версия}\"/

0
18.08.2020, 15:25
5 ответов

Только при использовании sed.

sed -n '10,20{=;p}' file.txt | sed '{N; s/\n/ /}'
  • N;указывает sedдобавить следующую строку в пространство шаблонов, так что теперь sedработает с обеими строками.
  • s/\n/ /заменяет символ новой строки пробелом, «объединяя» две строки вместе.

Источники:

Объяснения Алаа Али(в источнике 2)

1
18.03.2021, 23:11

Попробуйтеawk:

awk 'FNR==10,FNR==20 {print FNR ":" $0}' file.txt

Будет напечатан номер строки, двоеточие, а затем строка в диапазоне строк с 10 по 20.

Или прекратить чтение после строки 20:

awk 'FNR >= 10 {print FNR ":" $0}; FNR == 20 {exit}' file.txt

Если обрабатывается более одного файла и ваша реализация awkподдерживает директиву nextfile:

awk -v OFS=: 'FNR >= 10 {print FILENAME, FNR, $0}; FNR == 20 {nextfile}'./*.txt

(здесь также печатается имя текущего файла ).

3
18.03.2021, 23:11

sedимеет команду =, которая печатает номер строки.

sed -n '10,20{=;p}' file.txt

Однако он печатает номер строки в отдельной строке выше настоящая линия.

Если вы хотите предшествовать номеру строки в той же строке фактическую строку, вы можете передатьnlв sed,

nl file.txt | sed -n '10,20p'

Вы можете установить некоторые флаги nl, чтобы улучшить качество вывода. У меня есть псевдоним alias nl='nl -b a -n rz -s "|" -w1', чтобы использовать |в качестве разделителя между числом и строкой, числами, выравнивающими по правому краю, и т. д.

2
18.03.2021, 23:11

Если файл короткий:

perl -ne '10..20 and print "$. $_"'

Если файл длинный:

perl -ne '10..20 and print "$. $_"; 21..22 and exit'

Таким образом, вы остановитесь после прочтения строки 20.

1
18.03.2021, 23:11
$ < file grep -ne '^' | sed -ne '10,20p'

$ < file sed -e '10,20!d;=;20q' | paste -d: - -

Not so UUOC:
$ cat -n file | sed -nEe '10,20s/^\s*(\S+)\t/\1:/p'

$ perl -lne 's/^/$.:/;
    print if 10..20;
    last  if 20..20;
' file 
0
18.03.2021, 23:11

Теги

Похожие вопросы