Perl 无法读入变量来替换单词 [ksh]

Perl unable to read in variable to replace words [ksh]

我有一个名为 123.txt 的文本文件 在 123.txt 它包含

没关系 % : 很好
不好 % : 太糟糕了

我的工作是将 "is okay %" 中的单词替换为 可以 %

我当前的代码(不工作)

$temp_var="is okay \%"
perl -pi -e 's/$temp_var/okay can \%/g' *123.txt

在 % 上加上反斜杠以处理特殊字符的原因。

我曾尝试使用 sed -i 进行我之前的编码,但它没有成功,因为 -i 不是经典界面的一部分,我已尝试放置 's/is okay \%/okay can \%/g' 而不是 $temp_var 并且它能够工作。

我不太确定这是我转换变量的方式还是 $temp_var 无法在 PERL 中读取

谢谢!

你的替换对我有用,我唯一不同的是我还在 oneliner 本身中声明了变量 $temp_var。

$ cat so45451136.txt
is okay % : That's good
not okay % : That's bad

$ perl -pe '$temp_var="is okay \%";s/$temp_var/okay can \%/g;' so45451136.txt 
okay can % : That's good
not okay % : That's bad

s/$temp_var/okay can \%/g中,$temp_var指的是一个Perl变量。只有 ksh 进程知道它的变量。您需要将其值提供给 Perl。


硬编码:

perl -i -pe's/is okay %/okay can %/g' *123.txt

通过参数:

text='is okay %'
perl -i -pe'
   BEGIN { $text = shift(@ARGV); }
   s/\Q$text/okay can %/g;
' "$text" *123.txt

通过环境变量:

text='is okay %'
TEXT="$text" perl -i -pe's/$ENV{TEXT}/okay can %/g' *123.txt

通过环境变量:

export TEXT='is okay %'
perl -i -pe's/$ENV{TEXT}/okay can %/g' *123.txt

注意:"\Q$text\E" 创建一个匹配 $text 值的正则表达式。 (可以省略尾随 \E。)