bash - Удалить строку с помощью sed - PullRequest
0 голосов
/ 13 июля 2020

Я хочу удалить только строку " - [$the_real_ip]" и один пробел рядом с ней, используя sed из следующего формата потока журнала:

log-format-upstream: '$remote_addr - [$proxy_protocol_addr] - [$the_real_ip] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

Это то, что я пробовал, но у меня не работает:

  1. input_file имеет указанное выше содержимое.
  2. удалите команду - [$the_real_ip]
  3. Выполнить ниже .

sed 's/- [$the_real_ip]//g' input_file > output_file

Я могу удалить [$the_real_ip] с помощью команды:

sed 's/\[$the_real_ip]*\]//g' input_file

Я также хотел удалить - рядом с $the_real_ip] и дополнительное пространство, созданное после удаления. Как я могу это сделать?

1 Ответ

0 голосов
/ 14 июля 2020

Попробуйте экранировать специальные символы регулярного выражения:

sed 's/ - \[$the_real_ip\]//g' input_file

Вывод:

log-format-upstream: '$remote_addr - [$proxy_protocol_addr] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
...