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 youdenys– denys2013-01-11 20:09:39 +00:00Commented Jan 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.confF. Hauri - Give Up GitHub– F. Hauri - Give Up GitHub2013-01-11 20:14:20 +00:00Commented Jan 11, 2013 at 20:14 -
1@F.Hauri: What's wrong with
cat ... |?Emanuel Berg– Emanuel Berg2013-01-11 21:51:46 +00:00Commented Jan 11, 2013 at 21:51 -
8@EmanuelBerg It's an useless fork.
cat file | grep "blah"implie running two binaries through a fifo, whilegrep "blah" <filedo exactly same and bindfilenaturaly 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 sampleF. Hauri - Give Up GitHub– F. Hauri - Give Up GitHub2013-01-11 22:01:41 +00:00Commented 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.rahmu– rahmu2013-01-11 22:12:31 +00:00Commented Jan 11, 2013 at 22:12
Vim solution:
:v/^\s*[#\n]/p
I stumbled across this question when trying to find the vim solution myself.
-
1This would also delete lines that starts with blanks.2019-06-07 14:57:52 +00:00Commented Jun 7, 2019 at 14:57
-
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]/pDavid Lord– David Lord2019-06-08 23:27:21 +00:00Commented 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.Archemar– Archemar2015-10-13 09:19:23 +00:00Commented Oct 13, 2015 at 9:19
-
1I agree that goldilocks's answer was correct. However, I also considered it useful to not show empty lines.Morten Lind– Morten Lind2015-10-13 17:41:17 +00:00Commented 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.Stéphane Chazelas– Stéphane Chazelas2017-03-16 10:42:24 +00:00Commented 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.2019-06-07 14:56:47 +00:00Commented Jun 7, 2019 at 14:56
egrep -v "^#|^$" anyfile.txt
this command is to grep all info in file excluding comments and blank lines.
-
3Notice that smb.conf also comments with
;2019-07-11 18:41:15 +00:00Commented Jul 11, 2019 at 18:41
This should display you the file without those lines that begin with #:
grep -v "^#" filename
-
This does nothing to lines starting with
;.2019-06-07 14:56:11 +00:00Commented Jun 7, 2019 at 14:56
testparmdo this better as this display default values too.