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?
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"