#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/'