как прокомментировать идентифицированную строку в файле

#linux #shell #ubuntu

#linux #оболочка #ubuntu

Вопрос:

Я пытаюсь прокомментировать строку в файле .yml через командную строку, я использую эту команду sudo sed -i '/<pattern_to_find>/s/^#//g' /etc/metricbeat/metricbeat.yml , и она работает нормально, пока строка не идентифицирована, но я пытаюсь изменить идентифицированную строку, например:

 setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  # host: "localhost:5601"

  # Kibana Space ID

 

есть идеи, как этого добиться? Я не могу понять это

Комментарии:

1. pattern_to_find Начинается ли строка с ^# ? Добавьте немного пробелов к этому шаблону. например, сделайте это ^[ t]*# или подобное.

2. Ключевой деталью является содержимое pattern_to_find , и это противоречит цели вашего вопроса скрыть это значение.

3. строка pattern_to_find — это строка, в которой говорится # host: "localhost:560!" , что я пытался с sudo sed -i '/localhost:5601/s/^#//g' /etc/metricbeat/metricbeat.yml

4. Поэтому добавьте немного пробелов перед #

5. хахаха, спасибо, приятель, я был так расстроен, что не понимал, насколько это просто. Я пытался найти какой-нибудь символ идентификации или что-то в этом роде… Большое спасибо!

Ответ №1:

Хотя я настоятельно рекомендую вам не использовать эту -i опцию sed , я не буду обсуждать это, кроме упоминания об этом здесь. Вам просто нужно изменить шаблон поиска. Попробуйте:

 sed -E '/^( *)#( host: "localhost:560!")/s//1 2/'
 

Это не будет соответствовать жестким табуляциям. В зависимости от того, какую переносимость вы хотите между различными версиями said, это может быть проблемой. Но должно сработать следующее:

 sed -E '/^([[:space:]]*)#( host: "localhost:560!")/s//1 2/'