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. Commented Nov 28, 2011 at 15:42
  • awk '/^ *#/{next}1' file should be good enough. Commented 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? Commented 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 Commented Dec 12, 2011 at 4:23

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.