I am currently working on a custom source patcher and I'm having troubles with replacing string by another, including newlines.
For instance, I want to remove this pattern :
\n/* @patch[...]*/
In order to get this... :
this.is = code ;
/* @patch beta
blah blah
*/
if (!this.is) return 0 ;
/* @patch end */
... to this :
this.is = code ;
if (!this.is) return 0 ;
And not this :
this.is = code ;
<- newline
if (!this.is) return 0 ;
<- newline
Using a shell script, I'm using sed
command in order to do what I want :
sed -e "s|\/\* @patch.*\*\/||g" $file > $file"_2"
This works pretty well, but the newlines are still there.
This way doesn't work as sed
can't parse newlines :
sed -e "s|\n\/\* @patch.*\*\/||g" $file > $file"_2"
Neither this method work : How can I replace a newline (\n) using sed? , nor tr
(second answer on the same thread).
Would you have any solution to this ? Even heavy ones, performance is not important here.
P.S. : I am working on a web application, and in this case JavaScript files. Under Mac OS X Yosemite, but no matter what system I'm using, it seems to be a common issue for all bash users.
I found out another solution using Node.js for those who have troubles with their Awk version :
node -e "console.log(process.argv[1].replace(/[\n\r]\/\* @patch([\s\S]*?)\*\//mg, ''))" "`cat $filepath`"