Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 08-18-2005
Registered User
 
Join Date: Feb 2004
Posts: 92
Thanks: 0
Thanked 1 Time in 1 Post
Ignore Lines Begining With #

Is there a standard way to make a shell script read a file, or list, and skip each line that contains # at the begining, or ignores the content starting after a # in line?

I'm looking to mimic the way commenting in a shell script normally works. This way I can comment my text files and lists my scripts process and ignore comment lines.

Thanks guys.
Sponsored Links
    #2  
Old 08-18-2005
Registered User
 
Join Date: Jul 2005
Posts: 33
Thanks: 0
Thanked 0 Times in 0 Posts
If you want to do only a couple things with the output, filter you source file in a pipeline:
Code:
grep -v '^[[:space:]]*#' /path/to/your/file | your_commands

if you want do extensive stuff with your comment-stripped file, save the stripped file in a temp file, and use use the temp file for the rest of the procedure:
Code:
grep -v '^[[:space:]]*#' /path/to/your/file  >/tmp/stripped_source

Note that I use ^[[:space:]]* at the start of the regular expression because lines that are completely comments can still contain leading whitespace. If you want to eliminate blank lines also, do
Code:
 egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' /path/to/file >/tmp/stripped_file


Last edited by hadarot; 08-18-2005 at 08:53 PM..
Sponsored Links
    #3  
Old 08-18-2005
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Moderator
 
Join Date: Oct 2003
Location: 54.23, -4.53
Posts: 1,792
Thanks: 1
Thanked 101 Times in 91 Posts
Try...
Code:
$ cat file1
#line1
  #line2
line#3
line4

$ sed '/^ *#/d;s/#.*//' file1
line
line4

    #4  
Old 08-22-2005
Registered User
 
Join Date: Feb 2004
Posts: 92
Thanks: 0
Thanked 1 Time in 1 Post
Quote:
Originally Posted by Ygor
Try...
Code:
$ cat file1
#line1
  #line2
line#3
line4

$ sed '/^ *#/d;s/#.*//' file1
line
line4

After some testing I went with this method. Thanks to both of you.
Sponsored Links
    #5  
Old 08-23-2005
bakunin bakunin is offline Forum Staff  
Bughunter Extraordinaire
 
Join Date: May 2005
Location: In the leftmost byte of /dev/kmem
Posts: 3,297
Thanks: 27
Thanked 453 Times in 353 Posts
If you want your script to behave like the ksh itself (ignore the part of a line after a "#" but use the part before it) you could do the following (replace "<spc>" with a literal space, "<tab>" with a tab char):


Code:
script

sed 's/#.*$/;s/^[<spc><tab>]*//;s/[<spc><tab>]*$//;/^$/d' file

content of file
# this is a line with comments
   # this too, but starting with blanks
command 1        # this line contains an inline comment

command 2 "#"   # this too, but my script would be confused

result
command 1
command 2 "

Alas, the script fails on the second line, but save for such delicacies it works.

bakunin
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
sed command : print lines having no # at the begining hiten.r.chauhan Shell Programming and Scripting 3 02-28-2011 03:19 AM
Ignore identical lines forumthreads Shell Programming and Scripting 4 11-19-2008 06:39 AM
awk, ignore first x number of lines. trey85stang Shell Programming and Scripting 8 05-21-2008 04:44 AM
How can I ignore only the lines which have # at the begining? csaha Shell Programming and Scripting 1 01-30-2006 02:35 AM
Make sed ignore lines Scarlos Shell Programming and Scripting 2 07-21-2005 10:33 AM



All times are GMT -4. The time now is 12:12 AM.