Да, вы можете использовать команду `sed`, чтобы вставить строку только перед первой строкой, которая соответствует заданному шаблону. Для вашей задачи, когда нужно вставить строку `ZZZ` перед первой строкой, начинающейся с `XXX`, вы можете использовать следующую команду:
```bash
sed '0,/^XXX/{s/^/ZZZ\n/; t; d;}' tes.txt
```
Давайте разберем эту команду:
1. `0,/^XXX/` — это диапазон адресации. Он указывает на поиск от начала файла (0) до первой строки, которая соответствует шаблону `^XXX`.
2. `{s/^/ZZZ\n/; t; d;}` — это набор команд в фигурных скобках:
- `s/^/ZZZ\n/` — заменяет начало первой строки, который соответствует `^XXX`, добавляя `ZZZ` в виде новой строки перед ней.
- `t` — если предыдущая команда `s` была успешной (т.е. если замену произвели), то выполнение команды `t` остановится и дальнейшие команды не будут выполнены.
- `d` — команда, которая удаляет все последующие строки, которые соответствуют этому диапазону, таким образом, не добавляя `ZZZ` перед другими строками, которые начинаются с `XXX`.
Таким образом, команда вставляет `ZZZ` только перед первой строкой, которая соответствует заданному шаблону.
Вы можете протестировать эту команду, запустив её на вашем файле `tes.txt`, и вы получите ожидаемый результат.