I want to grep smb.conf
and see only lines which are not commented.
9 Answers
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
-
1right answer is:
cat /etc/samba/smb.conf | grep ^[^#\;]
But anyway Thank you– denysJan 11, 2013 at 20:09 -
-
7@denys You're wrong: goldilocks's response in not worst than your. .1 Please avoid using
cat ...|
syntax!. .2 For whipping empty lines AND lines containing only space, maybe with comments U could use this:grep -v "^ *\(#.*\|\)$" < smb.conf
Jan 11, 2013 at 20:14 -
8@EmanuelBerg It's an useless fork.
cat file | grep "blah"
implie running two binaries through a fifo, whilegrep "blah" <file
do exactly same and bindfile
naturaly to grep'sSTDIN
. [bash] useless cat is a full featured subject of search through any search engine! -> blog.sanctum.geek.nz/useless-use-of-cat ... for sample Jan 11, 2013 at 22:01 -
2It doesn't do exactly the same. It creates 2 processes and a pipe where 1 process is enough. Read the link given in @F.Hauri's last comment.– rahmuJan 11, 2013 at 22:12
Vim solution:
:v/^\s*[#\n]/p
I stumbled across this question when trying to find the vim solution myself.
-
1
-
True. I found that useful for config files as lines between comments otherwise fill up the output. If you'd rather keep the blank lines, change the
*
to+
like so:v/^\s+[#\n]/p
Jun 8, 2019 at 23:27
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>
-
Second grep i@nadj's looks useless , @goldilocks's answer was more than eough.– ArchemarOct 13, 2015 at 9:19
-
1I agree that goldilocks's answer was correct. However, I also considered it useful to not show empty lines. Oct 13, 2015 at 17:41
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]$
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
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.
-
2In what type of conf files are
<
or/
used for comments? I know a lot of conf file formats where<
is everything but a comment.!
is sometimes used like in X resource files. Mar 16, 2017 at 10:42
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.
-
The question also considers lines starting with
;
as a comment that should be removed.– Kusalananda ♦Jun 7, 2019 at 14:56
egrep -v "^#|^$" anyfile.txt
this command is to grep all info in file excluding comments and blank lines.
-
3
This should display you the file without those lines that begin with #
:
grep -v "^#" filename
testparm
do this better as this display default values too.