Первый ^относится к началу строки, поэтому строки с комментариями, начинающимися после первого символа, не будут исключены. [^#;]означает любой символ, который не является #или ;.
Другими словами, он сообщает о строках, начинающихся с любого символа, кроме #и ;. Это не то же самое, что сообщать о строках, которые не начинаются с #и ;(для которых вы будете использовать grep -v '^[#;]'), в том смысле, что они также исключают пустые строки, но это, вероятно, предпочтительнее в этом случае, так как я сомневаюсь, что вы заботитесь о пустых строках.
Если вы хотите игнорировать начальные пустые символы, вы можете изменить его на:
правильный ответ: cat /etc/samba/smb.conf | grep ^[^#\;]но все равно спасибо
отрицаю
Да, или вы могли бы использовать "цитаты"; Я редактировал это в последующем.
Златовласка
7
@denys Вы ошибаетесь: ответ Златовласки не хуже вашего. .1 Пожалуйста, избегайте использования cat ...| синтаксиса !. .2 Для взбивания пустых строк И строк, содержащих только пробел, возможно, с комментариями U может использовать это:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri
7
@EmanuelBerg Это бесполезная вилка. cat file | grep "blah"подразумевают запуск двух двоичных файлов через fifo , в то grep "blah" <fileже время делают точно так же и привязывают fileестественно к grep STDIN. [bash] бесполезный кот - полнофункциональный объект поиска в любой поисковой системе! -> blog.sanctum.geek.nz/useless-use-of-cat ... для примера
Ф. Хаури
2
Это не делает то же самое . Он создает 2 процесса и трубу, где достаточно 1 процесса. Прочитайте ссылку, приведенную в последнем комментарии @ F.Hauri.
Рахму
4
Vim решение:
:v/^\s*[#\n]/p
Я наткнулся на этот вопрос, пытаясь найти решение VIM самостоятельно.
Правда. Я нашел это полезным для конфигурационных файлов, поскольку строки между комментариями в противном случае заполняют вывод. Если вы предпочитаете оставлять пустые строки, измените *их +следующим образом:v/^\s+[#\n]/p
Дэвид Лорд
3
Канал к grep в ответе oliver nadj может быть устранен (при условии GNU grepили совместимости):
[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char
# Line 2 is a comment with hash symbol as second char
# Line 3 is a comment with hash symbol as third char
# Line 4 is a comment with tab first, then hash
; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$
Первый пример grep исключает строки, начинающиеся с любого количества пробелов, за которым следует символ хеша.
[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest
; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$
Вторая исключает строки, начинающиеся с любого количества пробелов, за которым следует символ хеша или точка с запятой.
В каком типе conf файлы используются <или /используются для комментариев? Я знаю много форматов conf файлов, где <есть все, кроме комментариев. !иногда используется как в файлах ресурсов X.
testparm
сделать это лучше, так как это отображает значения по умолчанию тоже.Ответы:
Первый
^
относится к началу строки, поэтому строки с комментариями, начинающимися после первого символа, не будут исключены.[^#;]
означает любой символ, который не является#
или;
.Другими словами, он сообщает о строках, начинающихся с любого символа, кроме
#
и;
. Это не то же самое, что сообщать о строках, которые не начинаются с#
и;
(для которых вы будете использоватьgrep -v '^[#;]'
), в том смысле, что они также исключают пустые строки, но это, вероятно, предпочтительнее в этом случае, так как я сомневаюсь, что вы заботитесь о пустых строках.Если вы хотите игнорировать начальные пустые символы, вы можете изменить его на:
или же
Или же
источник
cat /etc/samba/smb.conf | grep ^[^#\;]
но все равно спасибоcat ...|
синтаксиса !. .2 Для взбивания пустых строк И строк, содержащих только пробел, возможно, с комментариями U может использовать это:grep -v "^ *\(#.*\|\)$" < smb.conf
cat file | grep "blah"
подразумевают запуск двух двоичных файлов через fifo , в тоgrep "blah" <file
же время делают точно так же и привязываютfile
естественно к grepSTDIN
. [bash] бесполезный кот - полнофункциональный объект поиска в любой поисковой системе! -> blog.sanctum.geek.nz/useless-use-of-cat ... для примераVim решение:
Я наткнулся на этот вопрос, пытаясь найти решение VIM самостоятельно.
источник
*
их+
следующим образом:v/^\s+[#\n]/p
Канал к grep в ответе oliver nadj может быть устранен (при условии GNU
grep
или совместимости):источник
это то, что работает для меня. игнорировать закомментированные или пустые строки, даже пробелы перед хеш-меткой или точкой с запятой
источник
Эти примеры могут быть полезны для людей.
Первый пример grep исключает строки, начинающиеся с любого количества пробелов, за которым следует символ хеша.
Вторая исключает строки, начинающиеся с любого количества пробелов, за которым следует символ хеша или точка с запятой.
источник
Здесь я получил лучший (предполагая GNU
grep
или совместимый):исключить для строк, которые начинаются с
#;/%<
квадратных скобок, а второй фильтр после трубы -\s*$
для пустых строк.источник
<
или/
используются для комментариев? Я знаю много форматов conf файлов, где<
есть все, кроме комментариев.!
иногда используется как в файлах ресурсов X.Это намного лучше, я получил его с https://stackoverflow.com/questions/17392869/how-to-print-a-file-exclusive-comments-and-blank-lines-using-grep-sed
Предполагается, что GNU
grep
или совместимый.источник
;
комментария, который должен быть удален.Эта команда позволяет получить всю информацию в файле, за исключением комментариев и пустых строк.
источник
;
Это должно показать вам файл без тех строк, которые начинаются с
#
:grep -v "^#" filename
источник
;
.