11

How do I delete lines beginning with a #, given that there can be whitespace on the left and right of the #?

  # Master socket provides access to userdb information. It's typically

6 Answers 6

14

This seems to work, but I've not given deep thought to it:

sed -e '/^[[:space:]]*#/d'
0
10

You can use grep for that

grep -vh '^[[:space:]]*#' filename

Since, as I presume, you are stripping comments from some file, you might also consider removing empty lines, which expands the above to:

grep -vh '^[[:space:]]*\(#\|$\)' filename
0
3

awk solution is to invert matching your pattern.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
2
  • 5
    No need to escape the space character, no need to capture the space character, no need to specify the default action: awk '!/^ *#/' ./text.
    – manatwork
    Nov 28, 2011 at 15:42
  • awk '/^ *#/{next}1' file should be good enough. Dec 23, 2011 at 5:01
0
perl -ne 'print if ! /^\s*#/' ./text
1
  • hi @Peter-john-acklam, would this work when the code is followed by # comment? Jan 14, 2012 at 10:47
0

Using the sample data posted by ДМИТРИЙ МАЛИКОВ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

I prefer using pcre with grep so I use the -P switch for grep (must be GNU grep). The second grep is pure sugar to give you the words with no white-space. It would also "remove" empty lines.

-1
$ perl -pi -e '$_="" if /^\s*#/' filename
1
  • That's not good - doesn't delete lines, and clears lines like a#b
    – Mat
    Dec 12, 2011 at 4:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .