I want to replace the string using a shell variable.
today =`date ' %Y%m%d'`
perl -p -i -e 's/file"20221212"/file="${today}"/g'
The expectation is file="20221215"
.
But it failed, result is file=""
.
How to escape this case?
CodePudding user response:
Your issue is shell quoting. Using single quotes, '
, to delimit the Perl code disables all variable expansion. You need to use double quotes, "
, to get variable expansion.
Using shell without any Perl to illustrate the issue
today=`date ' %Y%m%d'`
echo 'today is $today'
will output this -- with no expansion of $today
today is $today
now with double quotes
today=`date ' %Y%m%d'`
echo "today is $today"
outputs this -- $today
has been expanded.
today is 20221215
Applying that to your code (I've removed the -i
option to make it easier to see the results) and escaped all double quotes in the perl code with \"
echo 'file"20221212"' >input.txt
perl -p -e "s/file\"20221212\"/file=\"${today}\"/g" input.txt
gives
file="20221215"
CodePudding user response:
Here I am giving you the hint how it should be:
I cannot reproduce the issue from your code.
#!/bin/sh
today=`date ' %Y%m%d'`
echo "today:$today"
file="input.txt";
perl -pi -e 's/file20221212/file='${today}'/g' $file
where input.txt
contains:
file20221212