Удалить строки, начинающиеся с #

10

Как удалить строки, начинающиеся с a #, если слева и справа от пробела могут быть пробелы #?

  # Master socket provides access to userdb information. It's typically
chris4000
источник

Ответы:

13

Кажется, это работает, но я не задумывался об этом:

sed -e '/^[[:space:]]*#/d'
Ульрих Шварц
источник
10

Вы можете использовать grepдля этого

grep -vh '^[[:space:]]*#' filename

Поскольку, как я предполагаю, вы удаляете комментарии из какого-либо файла, вы можете также рассмотреть возможность удаления пустых строк, что расширяет вышеприведенное до:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
источник
3

awk Решение состоит в том, чтобы инвертировать соответствующий вашему шаблону.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
источник
4
Нет необходимости экранировать символ пробела, не нужно , чтобы захватить пробел, нет необходимости определять действие по умолчанию: awk '!/^ *#/' ./text.
manatwork
awk '/^ *#/{next}1' fileдолжно быть достаточно хорошо
Джайпал Сингх
0
perl -ne 'print if ! /^\s*#/' ./text
Питер Джон Аклам
источник
hi @ Peter-john-acklam, сработает ли это, когда за кодом следует # комментарий?
Nikhil Mulley
0

Используя пример данных, размещенных ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Я предпочитаю использовать pcre с grep, поэтому я использую ключ -P для grep (должен быть GNU grep). Второй grep - чистый сахар, чтобы дать вам слова без пробелов. Это также "удалит" пустые строки.

Джим
источник
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Зайд
источник
Это нехорошо - не удаляет строки, а очищает такие строки, какa#b
Мат