How to grep lines which does not begin with "#" or ";"?

I want to grep smb.conf and see only lines which are not commented.

Asked By: denys

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

The first ^ refers to the beginning of the line, so lines with comments starting after the first character will not be excluded. [^#;] means any character which is not # or ;.

In other words, it reports lines that start with any character other than # and ;. It’s not the same as reporting the lines that don’t start with # and ; (for which you’d use grep -v '^[#;]') in that it also excludes empty lines, but that’s probably preferable in this case as I doubt you care about empty lines.

If you wanted to ignore leading blank characters, you could change it to:

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

or

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

Or

awk '$1 ~ /^[^;#]/' smb.conf
Answered By: goldilocks
grep -v "^s*[#;]" any.conf | grep -v "^s*$"

that is what works for me. ignore commented or empty lines, even whitespace before hash mark or semicolon

Answered By: oliver nadj

These examples might be of use to people.

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

The first grep example excludes lines beginning with any amount of whitespace followed by a hash symbol.

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

The second excludes lines beginning with any amount of whitespace followed by a hash symbol or semicolon.

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

[user@host tmp]$
Answered By: JungleMartin

The pipe to grep in oliver nadj’s answer may be eliminated by (assuming GNU grep or compatible):

grep -v "^s*[#;]|^s*$" <some_conf_file>
Answered By: Morten Lind

Vim solution:

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

I stumbled across this question when trying to find the vim solution myself.

Answered By: David Lord
grep -v '^$|^s*#' temp

This one’s a lot better, I got it from https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep-sed

It assumes GNU grep or compatible.

Answered By: Tek

Here i got better one (assuming GNU grep or compatible):

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

exclude for lines which begins with #;/%< which are in square brackets and the second filter after pipe is s*$ for blank lines.

Answered By: S. Venkata Ramana

This should display you the file without those lines that begin with #:
grep -v "^#" filename

Answered By: Avinasha
egrep -v "^#|^$" anyfile.txt

this command is to grep all info in file excluding comments and blank lines.

Answered By: Mustafa Hussein
Categories: Answers Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.