Bagaimana cara mendapatkan garis yang tidak dimulai dengan "#" atau ";"?


78

Saya ingin smb.confmelihat dan hanya melihat baris yang tidak dikomentari.


1
testparmlakukan ini dengan lebih baik karena ini juga menampilkan nilai default.
— F. Hauri

@ F. Hauri Terima kasih. itu bekerja juga. Tapi itu juga menghasilkan beberapa informasi yang tidak dibutuhkan (dalam kasus saya), yang harus dipahami juga ...
— denys


Cara lain melalui PCRE grep stackoverflow.com/a/45917459/3297613
— Avinash Raj

Jawaban:


125
grep "^[^#;]" smb.conf

Yang pertama ^mengacu pada awal baris, jadi baris dengan komentar yang dimulai setelah karakter pertama tidak akan dikecualikan. [^#;]berarti setiap karakter yang bukan #atau ;.

Dengan kata lain, ini melaporkan baris yang dimulai dengan karakter selain #dan ;. Ini tidak sama dengan melaporkan baris yang tidak dimulai dengan #dan ;(yang akan Anda gunakan grep -v '^[#;]') di dalamnya juga mengecualikan baris kosong , tapi itu mungkin lebih baik dalam hal ini karena saya ragu Anda peduli tentang baris kosong.

Jika Anda ingin mengabaikan karakter kosong utama, Anda dapat mengubahnya menjadi:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

atau

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

Atau

awk '$1 ~ /^[^;#]/' smb.conf

jawaban yang benar adalah: cat /etc/samba/smb.conf | grep ^[^#\;]Tapi bagaimanapun juga Terima kasih
— menolak

Ya, atau Anda bisa menggunakan "kutipan"; Saya mengeditnya kemudian.
— goldilocks

7
@denys Anda salah: respons goldilocks tidak lebih buruk dari Anda. .1 Harap menghindari penggunaan cat ...| sintaks !. .2 Untuk mencambuk garis kosong DAN garis yang hanya berisi ruang, mungkin dengan komentar Anda bisa menggunakan ini:grep -v "^ *\(#.*\|\)$" < smb.conf
— F. Hauri

7
@ EmanuelBerg Ini garpu yang tidak berguna. cat file | grep "blah"impie menjalankan dua binari melalui fifo , sementara grep "blah" <filemelakukan hal yang persis sama dan mengikat file secara alami ke grep STDIN. [bash] kucing tidak berguna adalah subjek pencarian fitur lengkap melalui mesin pencari apa pun! -> blog.sanctum.geek.nz/useless-use-of-cat ... untuk sampel
— F. Hauri

2
Itu tidak melakukan hal yang persis sama . Ini menciptakan 2 proses dan pipa di mana 1 proses sudah cukup. Baca tautan yang diberikan di komentar terakhir @ F.Hauri.
— rahmu

4

Solusi Vim:

:v/^\s*[#\n]/p

Saya menemukan pertanyaan ini ketika mencoba menemukan solusi vim sendiri.


1
Ini juga akan menghapus baris yang dimulai dengan kosong.
— Kusalananda

Benar. Saya menemukan bahwa berguna untuk file konfigurasi sebagai garis antara komentar jika tidak mengisi output. Jika Anda lebih suka menjaga garis kosong, mengubah *ke +suka begitu:v/^\s+[#\n]/p
— David Tuhan

3

Pipa untuk menerima jawaban oliver nadj dapat dihilangkan dengan (dengan asumsi GNU grepatau kompatibel):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

Grep kedua i @ nadj terlihat tidak berguna, jawaban @ goldilocks lebih dari cukup.
— Archemar

1
Saya setuju bahwa jawaban goldilocks benar. Namun, saya juga menganggap berguna untuk tidak menampilkan garis kosong.
— Morten Lind

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

itulah yang bekerja untuk saya. abaikan komentar atau baris kosong, bahkan spasi sebelum tanda pagar atau titik koma


2

Contoh-contoh ini mungkin bermanfaat bagi orang.

[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]$

Contoh grep pertama mengecualikan baris yang dimulai dengan jumlah spasi putih diikuti dengan simbol hash.

[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]$

Yang kedua tidak termasuk baris yang dimulai dengan jumlah spasi putih diikuti dengan simbol hash atau titik koma.

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

Di sini saya mendapatkan yang lebih baik (dengan asumsi GNU grepatau kompatibel):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

kecualikan untuk garis yang dimulai dengan #;/%<tanda kurung siku dan filter kedua setelah pipa \s*$untuk garis kosong.


2
Dalam jenis file conf apa <atau /digunakan untuk komentar? Saya tahu banyak format file conf di mana <segalanya kecuali komentar. !kadang-kadang digunakan seperti dalam file sumber daya X.
— Stéphane Chazelas


-2
egrep -v "^#|^$" anyfile.txt

perintah ini adalah untuk mengambil semua informasi dalam file tidak termasuk komentar dan baris kosong.


2
Perhatikan bahwa smb.conf juga berkomentar dengan;
— Jeff Schaller

-3

Ini akan menampilkan Anda file tanpa baris yang dimulai dengan #: grep -v "^#" filename


Ini tidak melakukan apa pun untuk baris mulai dengan ;.
— Kusalananda
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.