10

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
13

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

sed -e '/^[[:space:]]*#/d'
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
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
  • 4
    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 '11 at 15:42
  • awk '/^ *#/{next}1' file should be good enough. – jaypal singh Dec 23 '11 at 5:01
0
perl -ne 'print if ! /^\s*#/' ./text
  • hi @Peter-john-acklam, would this work when the code is followed by # comment? – Nikhil Mulley Jan 14 '12 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
  • That's not good - doesn't delete lines, and clears lines like a#b – Mat Dec 12 '11 at 4:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.