Как удалить комментарии с sed

Как удалить комментарии с sed

02.02.2020 02:48:57 Просмотров 29 Источник

У меня есть такой файл

<IfModule mod_unixd.c>
    # Run as a unique, less privileged user for security reasons.
    # User/Group: The name (or #number) of the user/group to run httpd as.
    # Default: User #-1, Group #-1
    # https://httpd.apache.org/docs/current/mod/mod_unixd.html
    # https://en.wikipedia.org/wiki/Principle_of_least_privilege
    User www-data #
    Group www-data
</IfModule>

Я использую команду для удаления комментариев, но она не удаляет комментарии, что случилось?

 sed -e '/^[\s]*#/d' test.conf'

Регулярное выражение в режиме онлайн

Выход должен быть

<IfModule mod_unixd.c>
    User www-data #
    Group www-data
</IfModule>
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/60025778/how-remove-comments-with-sed#comment106157816_60025778
Пожалуйста, добавьте желаемый результат (без описания) для этого примера ввода к вашему вопросу (без комментариев).

Ответы - Как удалить комментарии с sed / How remove comments with sed

Jonas Eberle

02.02.2020 02:55:03

Чтобы удалить любую строку, начинающуюся с пробела, за которым следует#, можно использовать

sed -e '/^\W*#/d' test.conf

Это означает, что шаблон совпадает

  • с самого начала линии
  • позволяет использовать только пробелы
  • за ним следуют: #
  • все, что после этого игнорируется
https://stackoverflow.com/questions/60025778/how-remove-comments-with-sed/60025824#comment106157873_60025824
Но он удаляет вместе с User www-data #
https://stackoverflow.com/questions/60025778/how-remove-comments-with-sed/60025824#comment106157935_60025824
@ Vitalii Да, это так. Я не знал о /д-спасибо. Я его отредактировал.
abhiarora

02.02.2020 02:55:55

Выход должен быть

Похоже, что вы хотите удалить строки, начинающиеся с #(после нуля или более пробелов) , и вы не хотите удалять комментарии, которые начинаются после окончания операторов без комментариев (напримерUser www-data #)

Попробовать это:

sed -e '/^\s*#/d' test.conf

Или вот это:

sed -e '/^[ \t]*#/d' test.conf

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

GNU sed также поддерживает символические имена:

sed -e '/^[[:space:]]*/d'

Который включает в себя все символы пробела, в том числе смешные unicode иностранных языков. Это, однако, менее портативно.

РЕДАКТИРОВАТЬ:

sed --versionв моей системе возвращается:

sed (GNU sed) 4.7
Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.
Закрыть X