I've used web search, found similarly titled question How many substitutions took place in a Perl s///g? and tried to use it to print the number but have not been able to succeed.
My initial code was
perl -0777 -i.original -pe 's-\r\n-\n-igs' test.txt
When I tried
perl -0777 -i.original -pe "$c=s-\r\n-\n-igs;say qq'$c'" test.txt
I got nothing - no output and no replacements, when I tried
perl -0777 -i.original -pe '$c=s-\r\n-\n-igs;print qq($c\n)' test.txt
(print
similar to other one-liners I used before) I got empty string in standard output but 454847
added as the beginning of file (and proper replacements).
I understand =~
is not needed in my case (What does =~ do in Perl?), so what is wrong with my code? How to print number of replacements made?
Because of -i
, the default output handle isn't STDOUT but the output file. To print to STDOUT, you'll need to do so explicitly.
If using the cmd
shell,
perl -0777pe"CORE::say STDOUT s/\r//g" -i.original test.txt
If using sh
or similar,
perl -0777pe'CORE::say STDOUT s/\r//g' -i.original test.txt
Notes:
s///
is more idiomatic than s---
/i
is useless here./s
is useless here.s/\r//g
will work just as fine as s/\r\n/\n/g
.say
instead of print
.CORE::say
instead of say
for backwards compatibility reasons unless use feature qw( say );
or equivalent is used.s/\r\n/\n/g
nor s/\r//g
will work with a Windows build of Perl, and there's no way to do what you want when using -i
on a Windows build of Perl. However, you are using a unix build of Perl (since MSYS is a unix emulation environment), so it's not an issue.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With