Regex 如何在正则表达式中使用的Perl文本中转义斜杠?
我想用当前日期替换字符串“\u end\u date”。因为当前日期中有斜杠(是的,我想要斜杠),所以我需要避开它们。我该怎么做Regex 如何在正则表达式中使用的Perl文本中转义斜杠?,regex,perl,escaping,slash,Regex,Perl,Escaping,Slash,我想用当前日期替换字符串“\u end\u date”。因为当前日期中有斜杠(是的,我想要斜杠),所以我需要避开它们。我该怎么做 我尝试过几种方法,比如使用“/”和Perl本身替换斜杠,但都不起作用。最后,我使用“cut”将日期分成3部分,并避开了斜杠,但这个解决方案看起来不太好。有更好的解决方案吗?在Perl中,您可以选择使用哪个字符来分隔正则表达式的各个部分。下面的代码可以正常工作 end_date=$(date +"%m/%d/%Y") /usr/bin/perl -pi -e "s/_e
我尝试过几种方法,比如使用“/”和Perl本身替换斜杠,但都不起作用。最后,我使用“cut”将日期分成3部分,并避开了斜杠,但这个解决方案看起来不太好。有更好的解决方案吗?在Perl中,您可以选择使用哪个字符来分隔正则表达式的各个部分。下面的代码可以正常工作
end_date=$(date +"%m/%d/%Y")
/usr/bin/perl -pi -e "s/_end_date_/${end_date}/g" filename
这是为了避免“倾斜牙签”综合征与/交替使用 使用不同的
s
分隔符:s{all/the/slashes/you/want/}{replacement}
我建议您更改分隔符,但您几乎总是可以使用quotemeta:
end_date = $(date +"%m/%d/%Y")
/usr/bin/perl -pi -e "s#_end_date_#${end_date}#g" filename
但你也有这样的路线:
/usr/bin/perl -pi -e "my \$ed=quotemeta('${end_date}');s/_end_date_/\$ed/g" filename
/usr/bin/perl-pi-e'BEGIN{use POSIX qw;$ed=quotemeta(strftime(q[%m/%d/%Y],localtime());}s/_end_date/$ed/'
这与您的两行代码的功能相同。基于Axeman的答案,以下内容对我适用:
/usr/bin/perl -pi -e 'BEGIN { use POSIX qw<strftime>; $ed=quotemeta(strftime( q[%m/%d/%Y], localtime())); } s/_end_date_/$ed/'
需要注意的几件事
- 不需要quotemeta,因为编译器没有在变量
中查找$ed
/
- 我使用了单引号
,而不是”
,否则您最终不得不引用“
$
- 我更喜欢使用
而不是-mpoix=strftime
开始{useposixqw}
perl -MPOSIX=strftime -p -e'$ed=strftime( q[%m/%d/%Y], localtime()) ;s/_end_date_/$ed/'