sed -i "s/01.00. *\"/\${версия}\"/g" file.json
Поиск линии до --с/01.00. *\"/ Замените на --/${версия}\"/
Только при использовании sed
.
sed -n '10,20{=;p}' file.txt | sed '{N; s/\n/ /}'
N;
указывает sed
добавить следующую строку в пространство шаблонов, так что теперь sed
работает с обеими строками. s/\n/ /
заменяет символ новой строки пробелом, «объединяя» две строки вместе. Источники:
Объяснения Алаа Али(в источнике 2)
Попробуйте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
(здесь также печатается имя текущего файла ).
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'
, чтобы использовать |
в качестве разделителя между числом и строкой, числами, выравнивающими по правому краю, и т. д.
Если файл короткий:
perl -ne '10..20 and print "$. $_"'
Если файл длинный:
perl -ne '10..20 and print "$. $_"; 21..22 and exit'
Таким образом, вы остановитесь после прочтения строки 20.
$ < 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