Как можно настроить sed для поиска по тексту в строке?

Привет всем! Можете помочь мне с модификацией следующей строки? <br/> <pre><code class="bash">sed 's^\[.*\]^^g' error.log.1 | sed 's^\, referer: [^\n]*^^g' | sort | uniq -c | sort -n</code></pre> <br/> <br/> Эта команда позволяет получить уникальные строки из лога Apache, удаляет дубликаты и подсчитывает количество вхождений каждой уникальной строки. Я хотел бы добавить условие, чтобы выводились только те строки, которые содержат текст "/var/www/domain/index.php".
  • 5 ноября 2024 г. 11:42
Ответы на вопрос 2
Вы можете модифицировать вашу команду `sed`, добавив условие для поиска строк, содержащих текст `/var/www/domain/index.php`. Это можно сделать с помощью встроенного фильтра `grep`, который позволит отобрать только те строки, которые содержат указанную подстроку.

Вот как это можно сделать, добавив `grep` в вашу цепочку команд:

```bash
sed 's/^\[.*\]//g' error.log.1 | sed 's/, referer: [^\n]*//g' | grep '/var/www/domain/index.php' | sort | uniq -c | sort -n
```

### Объяснение изменений:
1. **`grep '/var/www/domain/index.php'`** — этот шаг добавляет фильтрацию. После применения `sed` команды, эта команда оставит только строки, в которых присутствует указанный текст.
2. Команда `sort`, `uniq -c` и `sort -n` в конце остаются без изменений и продолжают выполнять свою работу, теперь уже с отфильтрованными строками.

Таким образом, данный скрипт теперь будет обрабатывать только те строки из `error.log.1`, которые содержат текст `/var/www/domain/index.php`, и затем подсчитывать количество уникальных вхождений.
Попробуй так 
sed '/\/var\/www\/domain\/index.php/s^\[.*\]^^g' error.log.1 | sed 's^\, referer: [^\n]*^^g' | sort | uniq -c | sort -n
Похожие вопросы