Replacing strings in files with bash sed or a scripting language (TCL, perl) -


i have list of c++ source files, have following structure:

// lot of stuff #include <current/parser/support/base.hpp> // ... #include <current/parser/iterators/begin.hpp> // ... 

i need replace lines

#include <current/parser/support/base.hpp> 

with

#include <support_base.hpp> 

namely, omit current/parser , replace separator (/) _. possible bash sed or scripting language?

edit: sorry, forgot mention want replace

#include <current/parser/*/*/*/*> 

anything can go after current/parser, , depth.

going tcl:

# open file reading set fin [open filein.c r] # open file write output set fout [open fileout.c w]  # loop through each line while {[gets $fin line] != -1} {     # check lines beginning "^#include <current/parser/"     #     # ^ matches beginning of line     # ([^>]*) matches part after "#include <current/parser/" , stores     #    in variable 'match'      if {[regexp {^#include <current/parser/([^>]*)>} $line - match]} {         # edited line built using match above after replacing         #    forward slashes underscores         set newline "#include <[string map {/ _} $match]>"     } else {         set newline $line     }     # put output file     puts $fout $newline }  # close channels close $fin close $fout 

output provided input:

// lot of stuff #include <support_base.hpp> // ... #include <iterators_begin.hpp> // ... 

demo on codepad (i edited code bit since can't have channel open read/write in files there)


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -