Write the shell / sed program which remove all the comments from a simple C program stored in your current directory. You can assume that the c source code contains only syntactically correct comments:
+ start with // and end with a newline
+ starting with /* and ending */ (can be multiline)
+ nesting of comments is not allowed
Make sure that C source is not changed at all.
How do I use this sed script?
$ ./script.sed output.c
$ for c in *.c; do script.sed /tmp/zyzcc.c; /bin/cp -f /tmp/zyzcc.c $c; done
Sample sed code to remove all comments from sed
#! /bin/sed -nf # Remove C and C++ comments, by Brian Hiles (brian_hiles@rocketmail.com) # Sped up (and bugfixed to some extent) by Paolo Bonzini (bonzini@gnu.org) # Works its way through the line, copying to hold space the text up to the # first special character (/, ", '). The original version went exactly a # character at a time, hence the greater speed of this one. But the concept # and especially the trick of building the line in hold space are entirely # merit of Brian. :loop # This line is sufficient to remove C++ comments! /^\/\// s,.*,, /^$/{ x p n b loop } /^"/{ :double /^$/{ x p n /^"/b break b double } H x s,\n\(.[^\"]*\).*,\1, x s,.[^\"]*,, /^"/b break /^\\/{ H x s,\n\(.\).*,\1, x s/.// } b double } /^'/{ :single /^$/{ x p n /^'/b break b single } H x s,\n\(.[^\']*\).*,\1, x s,.[^\']*,, /^'/b break /^\\/{ H x s,\n\(.\).*,\1, x s/.// } b single } /^\/\*/{ s/.// :ccom s,^.[^*]*,, /^$/ n /^\*\//{ s/..// b loop } b ccom } :break H x s,\n\(.[^"'/]*\).*,\1, x s/.[^"'/]*// b loop
Please note that this program is copied from public domain.
- RSS feed or Weekly email newsletter
- Share on Twitter • Facebook • 6 comments... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
can you please explain the script?
Very good!
But, if I want remove also empty lines ^[ \t]*$, in a single instance?
It seems to work incorrect on http://mxr.mozilla.org/mozilla-central/source/toolkit/content/contentAreaUtils.js
What is the error?
Brilliant fellas!
Just what I needed! Thank you very much!