Здесь, седь путь
sed -E ':a;N;$!ba;s#a#Z#;s#a#Z#;s#a#Z#' alphabet
Поскольку sed обычно работает в строках, любая команда для sed будет действовать только на 1 строку за раз. Чтобы иметь возможность заменить только первые 3 вхождения, нам нужно сначала сделать весь файл одним выделением, для которого мы сделаем 3 замены. В противном случае мы будем делать 3 замены в каждой строке.
:a
создает ярлык
N
добавляет следующую строку в пространство шаблонов
$!
пропускает последний перевод строки
ba
ветви маркировать
Теперь мы выбрали весь файл и будем работать с этим пространством вместо одной строки за раз, сделав 3 замены "а" на "Z".
Вышеприведенная команда будет работать только на GNU sed, более общей, но немного более уродливой версии, которая должна работать на не-GNU sed:
sed -e ':a' -e 'N' -e '$!ba' -e 's#a#Z#' -e 's#a#Z#' -e 's#a#Z#' alphabet
РЕДАКТИРОВАТЬ: Как предлагается в комментариях, добавление версии, которая использует команду g, чтобы сначала заменить все вхождения «a» на «Z», а затем заменить все вхождения «Z» после 3-го на «a» снова, что фактически приводит к замене только первые 3 вхождения «а». Таким образом, вы можете изменить последний номер, чтобы отразить количество замен, которые вам нужны.
sed -e ':a;N;$!ba;s#a#Z#g;s#Z#a#g4' alphabet