在命令行上执行perl搜索和替换时,如何小写匹配的令牌?



我有一个文件,里面有这样的行

TEST=value

我想进行搜索并替换,以便将第一个令牌替换为其小写等效项。 所以以上将转换为

prefix/test —output value

我尝试了以下方法

perl -pi -e ’s/(.*)=(.*)/prefix/lc($1) —output $2/g' .env

但显然"lc"被字面解释为,因为结果是

prefix/lc(TEST) —output value

可以使用L...E转义,它们在双引号上下文中工作(请参阅perlop)

perl -i -pe's{(.*)=(.*)}{prefix/L$1E --output $2}g' .env

请注意,L会一直使用小写所有后续字符,直到它遇到E因此即使这里不需要它,使用E也会更安全。我使用了{}{}分隔符,因此不必转义/

或者,特别是如果还有更多事情要做,请通过/e修饰符评估替换部分中的代码,例如

perl -i -pe's{(.*)=(.*)}{"prefix/" . lc($1) . " --output $2"}eg' .env

最新更新