Считайте, что у меня есть следующий файл:
echo "1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
" > ztest
Здесь я хотел бы изменить только первую 1
на 5
и оставить все остальное без изменений.
Я знаю, что у sed
есть команда quit
поэтому я пытаюсь сделать следующее:
$ sed 's/1/{5;q}/' ztest
{5;q}
2
3
4
{5;q}
2
3
4
{5;q}
2
3
4
{5;q}
2
3
4
Это меняет все строки, так что это не хорошо. Итак, я пытаюсь это:
$ sed '{s/1/5/;q}' ztest
5
Теперь, по-видимому, это выполняется в соответствии с запросом - изменяет первую строку и выходит; Тем не менее, я хотел бы, чтобы остальные строки остались нетронутыми! (поскольку это, в основном, приводит к замене всего файла одним '5')
Так что я в растерянности, какой синтаксис нужен? Обратите внимание, что мне нужно это, чтобы изменить "раннюю" строку во встроенном гигабайтовом файле (используя sed -i
); таким образом, я бы хотел, чтобы sed
поиск и замену только в первом кратком разделе - и после этого выходные строки не изменялись (поскольку sed -i
любом случае сначала выгружает временный файл, а затем перезаписывает оригинал); в надежде сэкономить время обработки.
Заранее спасибо за любые ответы,
Ура!
РЕДАКТИРОВАТЬ: забыл подвопрос: возможно ли распространить это на первые n совпадений? (скажем, в приведенном выше файле первые два '1 заменены на 5 - остальное это дословно?)