Как удалить из текста строку, которая содержит символ косой черты (слеш)?

Как использовать sed для удаления строки из файла, которая содержит дату в формате "30/Nov/2023"? Попытка применить команду sed -i '%30/Nov/2023%d' file не увенчалась успехом, поскольку вместо ожидаемого результата выдается ошибка: sed: -e expression #1, char 1: unknown command: `%'.
  • 4 декабря 2023 г. 8:29
Ответы на вопрос 1
Прежде всего, в команде `sed`, которую вы пробовали использовать, присутствует синтаксическая ошибка: вы используете символ `%` вместо стандартного адресного разделителя `/`. Также символ косой черты `/` имеется в самом шаблоне поиска, поэтому его следует экранировать с помощью обратного слэша `\` или же использовать другой адресный разделитель, чтобы избежать конфликта.

Для удаления строки, содержащей определённый шаблон, можно использовать следующий синтаксис команды `sed`:

```sh
sed '/pattern/d' file
```

Где `pattern` - это регулярное выражение, описывающее шаблон, и если строка содержит этот шаблон, она будет удалена. Применительно к дате в формате "30/Nov/2023", команду можно написать следующим образом:

```sh
sed '/30\/Nov\/2023/d' file
```

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

```sh
sed '\#30/Nov/2023#d' file
```

Чтобы изменения прямо в файле были выполнены "на месте", то есть без вывода в stdout и редиректа в другой файл, используйте ключ `-i`:

```sh
sed -i '/30\/Nov\/2023/d' file
```

Или с другим разделителем:

```sh
sed -i '\#30/Nov/2023#d' file
```

Ключ `-i` используется для изменения файлов "на месте", так что будьте осторожны: после выполнения команды исходный файл будет изменён и строки, содержащие заданный шаблон, будут удалены. Для большей безопасности можно сначала протестировать команду без ключа `-i`, чтобы увидеть результат на экране, а потом уже применять изменения к файлу.
Похожие вопросы