Replace the text in sed -


i have

<funcprototype>                 <funcdef>void <function>foo</function></funcdef>                 <paramdef>int <parameter>target</parameter></paramdef>                 <paramdef>char <parameter>name</parameter></paramdef> </funcprototype> <funcprototype>                 <funcdef>void <function>foo2</function></funcdef>                 <paramdef>int <parameter>target2</parameter></paramdef>                 <paramdef>char <parameter>name2</parameter></paramdef> </funcprototype> 

i need : void foo( int tagret char name) void foo2( int tagre2 char name2) using sed can

void foo( int target char name ) void foo2( int target2 char name2 ) 

i using command

awk "/\<funcprototype\>/,/\<\/funcprototype\>/ { print }" foo.xml | sed 's/^[ ^t]*//;s/[ ^]*$//'|sed -e '/^$/d'|sed 's/ //g'| sed 's/<funcprototype>//;s/<funcdef>//;s/<function>/ /;s/<\/function><\/funcdef>/(/;s/<paramdef>//;s/<parameter>/ /;s/<\/parameter><\/paramdef>//;s/<\/funcprototype>/)/;' 

how can want?

processing file formats xml in sed hack, "correct" solution highly depends on inputs want except. following sed script @ least works fine on example data provided:

:loop /<\/funcprototype>/ ! { n; b loop; } s/\n/ /g;  s/<\/\?\(funcdef\|parameter\|function\|funcprototype\)>//g; s/<paramdef>/(/g; s/<\/paramdef>/)/g; s/) *(/, /g;  s/  */ /g; s/^ //; s/ $//; s/ (/(/; 

the interesting bit :loop part in first 2 lines: :loop line defines label , 2nd line appends next line input buffer , jumps label until buffer contains closing </funcprototype> tag. after 2 commands whole multi-line <funcprototype> .. </funcprototype> block in buffer (with \n characters separating lines). newline characters replaced blanks using command s/\n/ /g in 3rd line.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -