Perl: Slurp entire file in a one liner
I need to change some text in a file that's spread across multiple lines. This means perl -pE
won't work because it treats each line as a separate regexp. Reading the file in to one big string and then running a multiline regexp is the best solution.
Using -0777
tells Perl to read the entire file in to one string and allows multi-line regexps to work as intended.
If you have an input file with the content like:
if (foo
&& bar && !true) {
# Do stuff
}
You can change the if
statement with a one-liner like this:
perl -0777 -pE 's/\(foo.*?\)/(test)/s' /tmp/input.txt