I'm doing an in-place search & replace with Perl. I need to replace all words in all lines that contain another word. For instance, remove all
const only in lines containing
sed I can do:
sed -i "/PMPI_/ s/const//g" file.c
However I need multi-line capabilities and sed doesn't seem to be the right tool for the job. I'm using Perl for everything else anyway. I tried
perl -pi -e "/PMPI_/ s/const//g" file.c
And other variations with no success. I could only find vim regex equivalents searching this site.
The syntax is:
perl -pi -e "s/const//g if /PMPI_/" file
You can also use a logical AND as in many languages derived from C:
perl -pi -e "/PMPI_/ && s/const//g" file
The second part of the condition
s/const//g is evaluated only if the first part
/PMPI_/ is true. But even if it is possible to do that, it is a shame in this case to do without the syntax close to natural language that Perl offers.
Note: you say you need multiline capabilities. I don't think you are looking for the slurp mode (that loads the whole file), but you could also work by paragraphs with the
echo 'PMPI_ const const const' | perl -00 -p -e "s/const//g if /PMPI_/"