Если у вас есть, например, файл конфигурации со строками, которые могут начинаться с символа комментария `#` и вы хотите вставить текст перед первым вхождением строки "location", которое не следует за символом комментария, вы можете использовать следующую команду `sed`.
Допустим, у вас есть файл `config.txt`:
```
# some config line
# location should not be matched
some setup line
location should be matched
another location line
```
Вам нужно вставить "0000" перед строкой "location should be matched". Команда `sed` для этого:
```sh
sed '/^[^#]*location/ s/location/0000 &/' config.txt
```
Это работает следующим образом:
- `^[^#]*location` - Выбирает строки, которые имеют "location" и не начинаются с `#` (символ `^` в качестве первого символа в скобках означает отрицание, т.е., любой символ, кроме `#`, может повторяться 0 или более раз до "location").
- `s/location/0000 &/` - Заменяет первое вхождение "location" в этих строках на "0000 location". Амперсанд `&` используется в шаблоне замены `sed` как ссылка на всё что было найдено поиском (в данном случае "location").
Обратите внимание, что если у вас есть строки, которые содержат пробелы перед "location" и они тоже считаются закомментированными, вам нужно будет скорректировать ваш шаблон поиска в соответствии с вашими требованиями.
Пример использования этой команды для записи изменений обратно в файл (с использованием `sed` с опцией `-i` для редактирования файла на месте):
```sh
sed -i '/^[^#]*location/ s/location/0000 &/' config.txt
```
Теперь содержимое файла `config.txt` будет выглядеть так:
```
# some config line
# location should not be matched
some setup line
0000 location should be matched
another location line
```