Solved

Command to Hide Comments

Posted on 2002-07-09
13
205 Views
Last Modified: 2013-12-15
I am often presented with config files modified by someone else and would like to make sure they are correct.
The problem with most config files is that there are only a few lines of active code and often hundreds of lines of comments.

Is there a simple bash command that will cat a file and skip all blank lines and all lines that start with #?

One of my techs wrote a perl script but that seems overkill.

0
Comment
Question by:davidpm
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 2
  • 2
  • +2
13 Comments
 
LVL 38

Expert Comment

by:yuzh
ID: 7142195
use can use the following command line to do the job:

assume your file name is: yourfile.txt

cat yourfile.txt | grep -v "^#" | grep -v "^$" | more

you can redirect to "less" or another file.
0
 
LVL 14

Expert Comment

by:chris_calabrese
ID: 7143371
I'll second that.
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7143970
# only one process needed:
  awk '($1 ~ /^#/){next}(NF==0){next}{print}' file
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 

Author Comment

by:davidpm
ID: 7147748
Thanks ahoffman but I'm ready for another language just yet.

The following works:
cat test.conf | grep -v "^#" | grep -v "^[[:space:]]*$"

The last grep means match if the line only has zero or more whitespace characters in it. This should match space and tab etc.

That last part is a little hard to remember. Is there a trimmer way of doing the same thing?


0
 
LVL 38

Accepted Solution

by:
yuzh earned 50 total points
ID: 7148539
You can define a function in your .profile

eg:

readconf ()
{
cat $1 | | grep -v "^#" | grep -v "^[[:space:]]*$"

}


to use it:

readconf test.conf
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7148647
FYI,
my suggestion works with any flaviour of awk on any UNIX,
"[[:space]]" is GNU-grep (and derivates) only (well, the default on Linux anyway).
And if performance or resources are in question: only one process ;-)
0
 
LVL 3

Expert Comment

by:DVB
ID: 7185552
egrep -v "(^#|^$)" /path/to/file
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7186300
DVB: s/"/'/g
 and it still does not remove all comment lines
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7186305
egrep -v '([ \t]*#|^[ \t]*$)' file
0
 
LVL 14

Expert Comment

by:chris_calabrese
ID: 7189200
What the heck...

egrep -v '^[ \t]*(#|$)' file
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7190003
contest closed?
LOL
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7313884
wow, the longest (characters and cpu time) suggestion got the grade ;-)

davidpm, could you please explain your decision?

(yuzh, no offence)
0
 
LVL 3

Expert Comment

by:DVB
ID: 7314188
I think it was the easiest to read. Regular expressions can get complicated.
0

Featured Post

What is a Denial of Service (DoS)?

A DoS is a malicious attempt to prevent the normal operation of a computer system. You may frequently see the terms 'DDoS' (Distributed Denial of Service) and 'DoS' used interchangeably, but there are some subtle differences.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Network Interface Card (NIC) bonding, also known as link aggregation, NIC teaming and trunking, is an important concept to understand and implement in any environment where high availability is of concern. Using this feature, a server administrator …
Using 'screen' for session sharing, The Simple Edition Step 1: user starts session with command: screen Step 2: other user (logged in with same user account) connects with command: screen -x Done. Both users are connected to the same CLI sessio…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
Suggested Courses

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question