Как исключить слова с определённым префиксом или символом при выборе?

Как использовать команду sed, чтобы исключить закомментированные локации, которые начинаются с символа # в текстовом файле? Моя текущая попытка не срабатывает, и мне кажется, что я использую неправильную команду. Вот мой текущий подход:

sed "0,/.*location/s//$location\n\n&/;s,/.*#location/,\1,g" file

Я хочу, чтобы решение позволило мне исключить строки с закомментированными локациями, но мне кажется, что моя команда не справляется с этой задачей. Я прочитал вот эту статью (ссылка), где говорится, что sed позволяет выполнять замены, и вот этот ответ на stackoverflow (ссылка), но у меня все равно возникают проблемы.
  • 21 января 2024 г. 18:58
Ответы на вопрос 2
Если вы хотите исключить строки, которые начинаются с символа `#`, то есть комментарии, можно использовать следующую команду `sed`:

```sh
sed '/^#/d' file
```

Здесь `^` обозначает начало строки, `#` — это искомый символ, который обозначает комментарий, `/d` — это команда удаления строки, если она соответствует шаблону. В целом, эта команда будет удалять все строки, которые начинаются с `#`.

Если же вам нужно исключить строки, где `#` не обязательно стоит в начале строки, но определенно перед словом `location`, то команда усложнится:

```sh
sed '/#location/d' file
```

На этот раз мы ищем строки, содержащие `#location`, и удаляем их целиком. Обратите внимание, что здесь не используется `^`, потому что `#` может встречаться в любом месте строки.

Обратите внимание, что фактической команда `sed` зависит от того, что именно вы хотите достичь:

- Если нужно удалить строки, где `#` стоит в начале строки (стандартный комментарий во многих конфигурациях), используйте первый вариант.
- Если `#` перед `location` может быть где-то внутри строки, используйте второй вариант.

Если вам нужно модифицировать исходный файл непосредственно, добавьте флаг `-i` в команду `sed`:

```sh
sed -i '/^#/d' file
```

или

```sh
sed -i '/#location/d' file
```
Похожие вопросы