Pierwszy ^odnosi się do początku linii, więc linie z komentarzami rozpoczynającymi się po pierwszym znaku nie zostaną wykluczone. [^#;]oznacza dowolny znak, który nie jest #lub ;.
Innymi słowy, zgłasza wiersze rozpoczynające się dowolnym znakiem innym niż #i ;. Nie jest to to samo, co zgłaszanie wierszy, które nie zaczynają się od #i ;(do których byś użył grep -v '^[#;]'), ponieważ wyklucza również puste wiersze, ale prawdopodobnie jest to lepsze w tym przypadku, ponieważ wątpię, czy zależy ci na pustych wierszach.
Jeśli chcesz zignorować wiodące puste znaki, możesz zmienić to na:
właściwa odpowiedź brzmi: cat /etc/samba/smb.conf | grep ^[^#\;]Ale i tak dziękuję
den
Tak, możesz użyć „cudzysłowów”; Później to zredagowałem.
goldilocks
7
@denys Mylisz się: odpowiedź goldilocks nie jest gorsza niż twoja. .1 Unikaj używania cat ...| składni !. .2 Do bicia pustych linii ORAZ wierszy zawierających tylko spację, może z komentarzami U może użyć tego:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri
7
@EmanuelBerg To bezużyteczny widelec. cat file | grep "blah"implie uruchomione dwa pliki binarne przez FIFO , podczas gdy grep "blah" <filerobią dokładnie to samo i wiążą filenaturaly grep-tych STDIN. [bash] bezużyteczny kot jest w pełni funkcjonalnym przedmiotem wyszukiwania w dowolnej wyszukiwarce! -> blog.sanctum.geek.nz/useless-use-of-cat ... dla próbki
F. Hauri 11.01.2013
2
Nie robi dokładnie tego samego . Tworzy 2 procesy i potok, w którym wystarczy 1 proces. Przeczytaj link podany w ostatnim komentarzu @ F.Hauri.
rahmu
4
Rozwiązanie Vim:
:v/^\s*[#\n]/p
Natknąłem się na to pytanie, kiedy sam próbowałem znaleźć rozwiązanie vim.
Spowodowałoby to również usunięcie wierszy rozpoczynających się spacjami.
Kusalananda
Prawdziwe. Uważam, że jest to przydatne w przypadku plików konfiguracyjnych jako linii między komentarzami, w przeciwnym razie wypełniają dane wyjściowe. Jeśli wolisz zachować puste wiersze, zmień to *na +:v/^\s+[#\n]/p
David Lord
3
Potok do grep w odpowiedzi Olivera Nadja można wyeliminować (zakładając GNU greplub zgodny):
[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]$
Pierwszy przykład grep wyklucza linie rozpoczynające się od dowolnej ilości białych znaków, po których następuje symbol skrótu.
[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]$
Drugi wyklucza linie rozpoczynające się od dowolnej ilości białych znaków, po których następuje symbol skrótu lub średnik.
W jakim typie plików conf są <lub są /używane komentarze? Znam wiele formatów plików conf, w których <wszystko oprócz komentarza. !jest czasami używany jak w plikach zasobów X.
testparm
zrób to lepiej, ponieważ wyświetlają również wartości domyślne.Odpowiedzi:
Pierwszy
^
odnosi się do początku linii, więc linie z komentarzami rozpoczynającymi się po pierwszym znaku nie zostaną wykluczone.[^#;]
oznacza dowolny znak, który nie jest#
lub;
.Innymi słowy, zgłasza wiersze rozpoczynające się dowolnym znakiem innym niż
#
i;
. Nie jest to to samo, co zgłaszanie wierszy, które nie zaczynają się od#
i;
(do których byś użyłgrep -v '^[#;]'
), ponieważ wyklucza również puste wiersze, ale prawdopodobnie jest to lepsze w tym przypadku, ponieważ wątpię, czy zależy ci na pustych wierszach.Jeśli chcesz zignorować wiodące puste znaki, możesz zmienić to na:
lub
Lub
źródło
cat /etc/samba/smb.conf | grep ^[^#\;]
Ale i tak dziękujęcat ...|
składni !. .2 Do bicia pustych linii ORAZ wierszy zawierających tylko spację, może z komentarzami U może użyć tego:grep -v "^ *\(#.*\|\)$" < smb.conf
cat file | grep "blah"
implie uruchomione dwa pliki binarne przez FIFO , podczas gdygrep "blah" <file
robią dokładnie to samo i wiążąfile
naturaly grep-tychSTDIN
. [bash] bezużyteczny kot jest w pełni funkcjonalnym przedmiotem wyszukiwania w dowolnej wyszukiwarce! -> blog.sanctum.geek.nz/useless-use-of-cat ... dla próbkiRozwiązanie Vim:
Natknąłem się na to pytanie, kiedy sam próbowałem znaleźć rozwiązanie vim.
źródło
*
na+
:v/^\s+[#\n]/p
Potok do grep w odpowiedzi Olivera Nadja można wyeliminować (zakładając GNU
grep
lub zgodny):źródło
to działa dla mnie. zignoruj komentarze lub puste linie, nawet białe spacje przed znakiem skrótu lub średnikiem
źródło
Te przykłady mogą być przydatne dla ludzi.
Pierwszy przykład grep wyklucza linie rozpoczynające się od dowolnej ilości białych znaków, po których następuje symbol skrótu.
Drugi wyklucza linie rozpoczynające się od dowolnej ilości białych znaków, po których następuje symbol skrótu lub średnik.
źródło
Tutaj mam lepszy (zakładając GNU
grep
lub kompatybilny):wyklucz dla linii, które zaczynają się od
#;/%<
nawiasów kwadratowych, a drugi filtr za rurą\s*$
dla pustych linii.źródło
<
lub są/
używane komentarze? Znam wiele formatów plików conf, w których<
wszystko oprócz komentarza.!
jest czasami używany jak w plikach zasobów X.Ten jest o wiele lepszy, dostałem go z https://stackoverflow.com/questions/17392869/how-to-print-a-file-exclusion-comments-and-blank-lines-using-grep-sed
Zakłada GNU
grep
lub kompatybilny.źródło
;
jako komentarza, który należy usunąć.to polecenie służy do grepowania wszystkich informacji w pliku z wyjątkiem komentarzy i pustych wierszy.
źródło
;
Powinno to wyświetlić plik bez wierszy rozpoczynających się od
#
:grep -v "^#" filename
źródło
;
.