Sponsored Content
Top Forums Shell Programming and Scripting How to filter only comments while reading a file including line break characters. Post 302418314 by alister on Monday 3rd of May 2010 10:23:08 PM
Old 05-03-2010
The only way to precisely implement a general purpose sh script to strip comments is to implement a sh language parser. In short, the goal would be to implement a sh parser in sh. Anything less would not be dependable for general purpose use. That said, for your needs (whatever they may be), perhaps an 80% solution is satisfactory 99% of the time.

If the input to the comment stripper is not constrained to some restricted format, there will be problems. The "#" is used for purposes other than to introduce a comment. And, even if it had no other use, situations like quoted strings and command substitutions would need to be taken into account.

The following posix-compliant sh script would be mangled by any naive solution.

nocomments.sh:
Code:
#!/bin/sh

echo There is no comment line beginning with a\
# in this file except for the leading '#!/bin/sh', which you may not want removed

echo If this' # was not quoted', I would be a comment
echo $# is the number of positional parameters, not a comment

Note that the above sh script contains no comments, other than the shebang line (#!/bin/sh), which you may not want to strip, depending on your goal.

Verifying the validity of the script, and that the line beginning with a "#" is indeed not a comment:
Code:
$ ./nocomments.sh 
There is no comment line beginning with a# in this file except for the leading #!/bin/sh, which you may not want removed
If this # was not quoted, I would be a comment
0 is the number of positional parameters, not a comment

Testing a proposed solution (sorry, danmero, I just picked yours because it's the latest post as I write this Smilie; all others suffer the same shortcomings):
Code:
$ awk '$1!="#" && NF{gsub(/^[\t ]*/,x);sub("#.*",x);print}' nocomments.sh 

echo There is no comment line beginning with a\
echo If this' 
echo $

The comment-less (shebang excepted) script has been mutilated.

Again, the proposed solutions may be sufficient for your needs; I'm simply pointing out their unsuitability for general purpose use.

Regards,
Alister

P.S. And those are just some posix-compliant possibilities, who knows what madness awaits beyond the standard Smilie
 

10 More Discussions You Might Find Interesting

1. Programming

Reading special characters while converting sequential file to line sequential

We have to convert a sequential file to a 80 char line sequential file (HP UX platform).The sequential file contains special characters. which after conversion of the file to line sequential are getting coverted into "new line" or "tab" and file is getting distorted. Is there any way to read these... (2 Replies)
Discussion started by: Rajeshsu
2 Replies

2. Shell Programming and Scripting

Reading a path (including ref to shell variable) from file

Hi! 1. I have a parameter file containing path to log files. For this example both paths are the same, one is stated directly and the second using env variables. /oracle/admin/orcl/bdump/:atlas:trc:N ${ORACLE_BASE}/admin/${ORACLE_SID}/bdump/:${ORACLE_SID}:trc:N 2. I try to parse the path... (1 Reply)
Discussion started by: lojzev
1 Replies

3. Shell Programming and Scripting

Replacing characters in file with line break

Hi, Apologies if this has been asked before, but I searched and was not able to find an answer. It's probably a simple question to answer for those of you with some experience, though... I have a relatively long string where tokens are separated by the colon (':') character. Let's say the... (10 Replies)
Discussion started by: johnemb
10 Replies

4. UNIX for Dummies Questions & Answers

Reading a line including spaces

Hi All, I have a script that reads a file and echo it back to std out. Test.txt 1aaaaaaaaaaa . The script is ReadLine.sh #!/bin/ksh cat $1 | while read file do echo $file done I invoke the script as ReadLine.sh Test.txt The output that I get is (1 Reply)
Discussion started by: aksarben
1 Replies

5. Shell Programming and Scripting

Break line after last "/" if length > X characters

Hello. I am a french newbie in unix shell scripting (sorry if my english speaking is wrong). I have a file with path and filenames in it. I want to limit the number of characters on each line and break the line if necessary. But the "break" should occur after a slash caracter "/". Example of... (9 Replies)
Discussion started by: SportBilly
9 Replies

6. Shell Programming and Scripting

filter record from a file reading another file

Hi, I want to filter record from a file if the records in the second column matches the data in another file. I tried the below awk command but it filters the records in the filter file. I want the opposite, to include only the records in the filter file. I tried this: awk -F'|'... (8 Replies)
Discussion started by: gpaulose
8 Replies

7. Shell Programming and Scripting

[Solved] Problem in reading a file line by line till it reaches a white line

So, I want to read line-by-line a text file with unknown number of files.... So: a=1 b=1 while ; do b=`sed -n '$ap' test` a=`expr $a + 1` $here do something with b etc done the problem is that sed does not seem to recognise the $a, even when trying sed -n ' $a p' So, I cannot read... (3 Replies)
Discussion started by: hakermania
3 Replies

8. Shell Programming and Scripting

Add line break for each line in a file

I cannot seem to get this to work.. I have a file which has about 100 lines, and there is no end of line (line break \n) at the end of each line, and this is causing problem when i paste them into an application. the file looks like this this is a test that is a test balblblablblhblbha... (1 Reply)
Discussion started by: fedora
1 Replies

9. UNIX for Dummies Questions & Answers

add a string to a file without line break

I searched and found "echo -n" and "printf" are solution for this, but they are not here: $ echo "hello" >> test $ cat test hello $ echo -n "world" >> test $ cat test hello world $ echo -n " seriously?" >> test $ cat test hello world seriously? This is not successful... (15 Replies)
Discussion started by: stunn3r
15 Replies

10. UNIX for Beginners Questions & Answers

Including Hash / in sed command filter

Hello All, I want to print data in between two lines in a file sample.txt through more or cat command on the screen. For that I am using below sed command to give the BEGIN and END text. Content of sample.txt server01:~ # cat /proc/mdstat Hello this is a text message 1 Hello this is a... (5 Replies)
Discussion started by: Xtreme
5 Replies
VORBISCOMMENT(1)						 Ogg Vorbis Tools						  VORBISCOMMENT(1)

NAME
vorbiscomment - List or edit comments in Ogg Vorbis files SYNOPSIS
vorbiscomment [-l] [-R] [-e] file.ogg vorbiscomment -a [ -c commentfile | -t "name=value" ] [-q] [-R] [-e] in.ogg [out.ogg] vorbiscomment -w [ -c commentfile | -t "name=value" ] [-q] [-R] [-e] in.ogg [out.ogg] DESCRIPTION
vorbiscomment Reads, modifies, and appends Ogg Vorbis audio file metadata tags. OPTIONS
-a, --append Append comments. -c file, --commentfile file Take comments from a file. The file is the same format as is output by the the -l option or given to the -t option: one element per line in 'tag=value' format. If the file is /dev/null and -w was passed, the existing comments will be removed. -h, --help Show command help. -l, --list List the comments in the Ogg Vorbis file. -q, --quiet Quiet mode. No messages are displayed. -t 'name=value', --tag 'name=value' Specify a new tag on the command line. Each tag is given as a single string. The part before the '=' is treated as the tag name and the part after as the value. -w, --write Replace comments with the new set given either on the command line with -t or from a file with -c. If neither -c nor -t is given, the new set will be read from the standard input. -R, --raw Read and write comments in UTF-8, rather than converting to the user's character set. -e, --escapes Quote/unquote newlines and backslashes in the comments. This ensures every comment is exactly one line in the output (or input), allowing to filter and round-trip them. Without it, you can only write multi-line comments by using -t and you can't reliably dis- tinguish them from multiple one-line comments. Supported escapes are c-style " ", " ", "\" and "". A backslash followed by anything else is an error. Note: currently, anything after the first "" is thrown away while writing. This is a bug -- the Vorbis format can safely store null characters, but most other tools wouldn't handle them anyway. -V, --version Display the version of vorbiscomment. EXAMPLES
To just see what comment tags are in a file: vorbiscomment -l file.ogg To edit those comments: vorbiscomment -l file.ogg > file.txt [edit the comments in file.txt to your satisfaction] vorbiscomment -w -c file.txt file.ogg newfile.ogg To simply add a comment: vorbiscomment -a -t 'ARTIST=No One You Know' file.ogg newfile.ogg To add a set of comments from the standard input: vorbiscomment -a file.ogg ARTIST=No One You Know ALBUM=The Famous Album <ctrl-d> TAG FORMAT
See http://xiph.org/ogg/vorbis/doc/v-comment.html for documentation on the Ogg Vorbis tag format, including a suggested list of canonical tag names. AUTHORS
Program Authors: Michael Smith <msmith@xiph.org> Ralph Giles <giles@xiph.org> Manpage Author: Christopher L Cheney <ccheney@debian.org> SEE ALSO
oggenc(1), oggdec(1), ogg123(1), ogginfo(1) Xiph.Org Foundation December 30, 2008 VORBISCOMMENT(1)
All times are GMT -4. The time now is 08:32 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy