“#” Veya “;” ile başlamayan çizgiler nasıl çizilir?


78

Grep smb.confve sadece yorumlanmamış satırları görmek istiyorum .


1
testparmBunu, bu varsayılan değerleri de gösterdiğinden daha iyisini yapın.
F. Hauri,

@ F.Hauri Teşekkürler. de çalışıyor. Ama bazı gereksiz (benim durumumda) da grepped gereken bilgileri ... üretmek de
denys


PCRE grep ile başka bir yol stackoverflow.com/a/45917459/3297613
Avinash Raj

Yanıtlar:


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

Birincisi ^satırın başlangıcını belirtir, bu nedenle ilk karakterden sonra başlayan yorumları olan satırlar dışlanmayacaktır. veya [^#;]olmayan herhangi bir karakter anlamına gelir .#;

Başka bir deyişle, #ve dışında herhangi bir karakterle başlayan satırları rapor eder ;. O ile başlamayın hatları raporlama aynı değil #ve ;(Kullanmak istediğiniz en fazla grep -v '^[#;]'da dışlar ki) boş satırları, ama boş hatları umurumda şüphe olarak bu durumda muhtemelen tercih edilir.

Baştaki boş karakterleri görmezden gelmek isterseniz, onu şu şekilde değiştirebilirsiniz:

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

veya

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

Veya

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

doğru cevap: cat /etc/samba/smb.conf | grep ^[^#\;]Ama yine de teşekkürler
denys

Evet, ya da "tırnak" kullanabilirsin; Bunu sonradan düzenledim.
goldilocks

7
@denys Yanılıyorsun: goldilocks tepkisi seninkinden daha kötü değil. .1 Lütfen cat ...| sözdizimi kullanmaktan kaçının ! .2 Boş satırları kırbaçlamak için ve sadece boşluk içeren satırlar, belki de U yorumlarıyla grep -v "^ *\(#.*\|\)$" < smb.conf
şunları

7
@EmanuelBerg İşe yaramaz bir çatal. cat file | grep "blah"implie bir içinden iki ikilileri çalışan fifo'ya ederken, grep "blah" <filetam olarak aynı şeyi ve bağlama file naturaly grep giden tarihiyle STDIN. [bash] işe yaramaz kedi herhangi bir arama motoru aracılığıyla arama tam özellikli bir konudur! -> blog.sanctum.geek.nz/useless-use-of-cat ... numune için
F. Hauri

2
Aynısını yapmaz . 2 işlem ve 1 işlemin yeterli olduğu bir boru oluşturur. @ F.Hauri'nin son yorumunda verilen bağlantıyı okuyun.
rahmu

4

Vim çözümü:

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

Vim çözümünü kendim bulmaya çalışırken bu soruya rastladım.


1
Bu, boşluklarla başlayan satırları da siler.
Kusalananda

Doğru. Bunu config dosyaları için yorumlar arasında satır olarak yararlı buldum aksi halde çıktıyı doldurdum. Bunun yerine boş satırlar kalmasını istiyorsanız, değiştirmek *için +bu kadar mi:v/^\s+[#\n]/p
David Rab

3

Oliver nadj'ın cevabında aşınacak olan boru (GNU grepveya uyumlu olduğu varsayılarak) elimine edilebilir :

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

İkinci grep i @ nadj's işe yaramaz görünüyor, @ goldilocks'ın cevabı eough daha fazlaydı.
Archemar

1
Goldilocks'un cevabının doğru olduğuna katılıyorum. Ancak, boş satır göstermemeyi de faydalı buldum.
Morten Lind

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

bu benim için işe yarıyor. Yorumlanmış veya boş satırları yoksay, karma işareti veya noktalı virgül öncesi boşluk bile olsa


2

Bu örnekler insanlara faydalı olabilir.

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

İlk grep örneği, herhangi bir miktarda boşlukla başlayan ve ardından bir karma sembolüyle başlayan çizgileri hariç tutar.

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

İkincisi, herhangi bir miktarda boşlukla başlayan ve ardından bir karma sembolü veya noktalı virgül ile başlayan çizgileri hariç tutar.

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

[user@host tmp]$

0

İşte daha iyisini anladım (GNU grepveya uyumlu olduğu varsayılarak ):

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

#;/%<Köşeli parantez içinde başlayan çizgiler ve borudan sonraki ikinci filtre \s*$boş çizgiler içindir.


2
Conf dosyaları ne tür yılında edilir <veya /yorumlar için kullanılan? <Bir yorumdan başka her şeyin olduğu bir çok conf dosya formatı biliyorum . !bazen X kaynak dosyalarında olduğu gibi kullanılır.
Stéphane Chazelas


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

Bu komut, yorumlar ve boş satırlar dışındaki tüm bilgileri dosyaya eklemektir.


2
Ayrıca smb.conf ile de dikkat edin;
Jeff Schaller

-3

Bu işlem, bu satırlarla başlayan dosyayı göstermelidir #: grep -v "^#" filename


Bu ile başlayan çizgilere hiçbir şey yapmaz ;.
Kusalananda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.