วิธี grep บรรทัดที่ไม่ขึ้นต้นด้วย“ #” หรือ“;”?


78

ฉันต้องการ grep smb.confและเห็นเฉพาะบรรทัดที่ไม่ได้แสดงความคิดเห็น


1
testparmทำสิ่งนี้ให้ดีขึ้นเนื่องจากค่านี้แสดงค่าเริ่มต้นด้วย
F. Hauri

@ F.Hauri ขอบคุณ มันทำงานได้ดี แต่ก็ยังผลิตบางส่วนที่ไม่จำเป็นข้อมูล (ในกรณีของฉัน) ซึ่งควรจะ grepped ยัง ...
Denys


อีกวิธีหนึ่งผ่าน PCRE grep stackoverflow.com/a/45917459/3297613
Avinash Raj

คำตอบ:


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

ตัวแรก^หมายถึงจุดเริ่มต้นของบรรทัดดังนั้นบรรทัดที่มีความคิดเห็นที่เริ่มต้นหลังจากอักขระตัวแรกจะไม่ถูกแยกออก [^#;]หมายถึงตัวอักษรใด ๆ ซึ่งไม่ได้หรือ#;

ในคำอื่น ๆ จะรายงานเส้นที่ขึ้นต้นด้วยตัวอักษรใด ๆ อื่น ๆ กว่าและ# ;มันไม่เหมือนกับการรายงานบรรทัดที่ไม่ได้ขึ้นต้นด้วย#และ;(ซึ่งคุณจะใช้grep -v '^[#;]') ในการที่จะยกเว้นบรรทัดว่างแต่อาจเป็นที่นิยมในกรณีนี้เนื่องจากฉันสงสัยว่าคุณสนใจบรรทัดว่างเปล่า

หากคุณต้องการเพิกเฉยอักขระว่างนำหน้าคุณสามารถเปลี่ยนเป็น:

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

หรือ

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

หรือ

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

คำตอบที่ถูกคือ: cat /etc/samba/smb.conf | grep ^[^#\;]แต่อย่างไรก็ตามขอบคุณ
ปฏิเสธ

ใช่หรือคุณสามารถใช้ "เครื่องหมายคำพูด"; ฉันแก้ไขมันในภายหลัง
goldilocks

7
@denys คุณผิด: การตอบสนองของ goldilocks ไม่เลวร้ายไปกว่าของคุณ .1 โปรดหลีกเลี่ยงการใช้cat ...| ไวยากรณ์! 0.2 สำหรับวิปปิ้งบรรทัดว่างและสายที่มีพื้นที่เพียงอาจจะมีความคิดเห็น U สามารถใช้นี้:grep -v "^ *\(#.*\|\)$" < smb.conf
เอฟ HAURI

7
@EmanuelBerg มันเป็นทางเลือกที่ไร้ประโยชน์ cat file | grep "blah"implie ทำงานสองไบนารีผ่านFIFOในขณะที่grep "blah" <fileทำเช่นเดียวกันตรงและผูกfile naturalyเพื่อ STDINgrep [ทุบตี] แมวที่ไร้ประโยชน์เป็นเรื่องที่มีคุณสมบัติครบถ้วนในการค้นหาผ่านเครื่องมือค้นหาใด ๆ ! -> blog.sanctum.geek.nz/useless-use-of-cat ... สำหรับตัวอย่าง
F. Hauri

2
มันไม่ได้ทำเหมือนกันทุกประการ มันสร้าง 2 กระบวนการและไปป์ที่ 1 กระบวนการก็พอ อ่านลิงก์ที่ให้ไว้ในความคิดเห็นล่าสุดของ @ F.Hauri
rahmu

4

วิธีการแก้ปัญหาเป็นกลุ่ม:

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

ฉันสะดุดกับคำถามนี้เมื่อพยายามหาคำตอบที่เป็นกลุ่มตัวเอง


1
นี่จะเป็นการลบบรรทัดที่ขึ้นต้นด้วยช่องว่าง
Kusalananda

จริง ฉันพบว่ามีประโยชน์สำหรับไฟล์กำหนดค่าเป็นบรรทัดระหว่างความคิดเห็นเป็นอย่างอื่นเติมเต็มเอาต์พุต ถ้าคุณต้องการให้บรรทัดว่างเปลี่ยน*ไป+ชอบดังนั้น:v/^\s+[#\n]/p
เดวิดลอร์ด

3

ไปป์ grep ในคำตอบของ oliver nadj อาจถูกกำจัดโดย (สมมติว่า GNU grepหรือเทียบเท่า):

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

grep ที่สอง i @ nadj ดูไร้ประโยชน์คำตอบของ @ goldilocks ยิ่งกว่า eough
Archemar

1
ฉันเห็นด้วยว่าคำตอบของ goldilocks นั้นถูกต้อง อย่างไรก็ตามฉันคิดว่ามันมีประโยชน์ที่จะไม่แสดงบรรทัดว่างเปล่า
Morten Lind

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

นั่นคือสิ่งที่ได้ผลสำหรับฉัน ละเว้นบรรทัดที่ใส่หมายเหตุหรือว่างเปล่าแม้แต่ช่องว่างก่อนเครื่องหมายแฮชหรืออัฒภาค


2

ตัวอย่างเหล่านี้อาจใช้กับคน

[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 แรกไม่รวมบรรทัดที่ขึ้นต้นด้วย whitespace ใด ๆ ตามด้วยสัญลักษณ์แฮช

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

บรรทัดที่สองแยกบรรทัดที่ขึ้นต้นด้วยช่องว่างใด ๆ ตามด้วยสัญลักษณ์แฮชหรืออัฒภาค

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

[user@host tmp]$

0

ที่นี่ฉันดีขึ้นหนึ่ง (สมมติว่า GNU grepหรือเข้ากันได้):

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

ยกเว้นสำหรับบรรทัดที่ขึ้นต้นด้วย#;/%<ซึ่งอยู่ในเครื่องหมายวงเล็บเหลี่ยมและตัวกรองที่สองหลังจากไพพ์\s*$สำหรับบรรทัดว่าง


2
ไฟล์ conf ประเภทใดที่ใช้<หรือ/แสดงความคิดเห็น? ฉันรู้ว่าไฟล์ฟอร์แมทมากมายที่<เป็นทุกอย่างยกเว้นความคิดเห็น !บางครั้งใช้เหมือนในไฟล์ทรัพยากร X
Stéphane Chazelas

-1
grep -v '^$\|^\s*#' temp

คนนี้ดีขึ้นมากฉันได้รับจากhttps://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep-sed

มันถือว่า GNU grepหรือเข้ากันได้


คำถามนี้ยังพิจารณาบรรทัดที่ขึ้นต้นด้วย;ความคิดเห็นที่ควรลบออก
Kusalananda

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

คำสั่งนี้คือการ grep ข้อมูลทั้งหมดในไฟล์ไม่รวมความคิดเห็นและบรรทัดว่าง


2
ขอให้สังเกตว่า smb.conf ยังแสดงความคิดเห็นด้วย;
Jeff Schaller

-3

นี่จะแสดงไฟล์ที่ไม่มีบรรทัดที่ขึ้นต้นด้วย#: grep -v "^#" filename


;นี้ไม่มีอะไรที่จะสายที่เริ่มต้นด้วย
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.