Perl 如何避免awk中的转义字符
我想这个问题与awk有关。 我没有awk的经验。我试了很多方法,但都找不到解决办法 实际上,我想逐行读取一个文件,然后用perl替换整行 我简化了代码。我希望你能理解Perl 如何避免awk中的转义字符,perl,shell,awk,Perl,Shell,Awk,我想这个问题与awk有关。 我没有awk的经验。我试了很多方法,但都找不到解决办法 实际上,我想逐行读取一个文件,然后用perl替换整行 我简化了代码。我希望你能理解 new_line1=1234567 new_line2=1234/567 perl -pi -e "s/$new_line1/$new_line2/g" $FILE 问题是当我使用时与/相关 Number found where operator expected at -e line 1, near "s/1234567/1
new_line1=1234567
new_line2=1234/567
perl -pi -e "s/$new_line1/$new_line2/g" $FILE
问题是当我使用时与/
相关
Number found where operator expected at -e line 1, near "s/1234567/1234/567"
syntax error at -e line 1, near "s/1234567/1234/567"
因为bash假设perl-pi-e“s/1234567/1234**/**567/g”$FILE
如何避免它。如果不想逃避它,请使用与
/
不同的分隔符:
perl -pi -e "s#$new_line1#$new_line2#g" $FILE
如果不想转义,请使用与
/
不同的分隔符:
perl -pi -e "s#$new_line1#$new_line2#g" $FILE
由于您在标题中提到了awk 标准解决方案是使用不同的分隔符。不幸的是,在awk中,您无法直观地编写
\@pattern@
来使用@
作为分隔符,但您可以显式调用match
:
awk 'match( $0, "'$new_line1'" ) { print "'$new_line2'"; next } 1' $FILE
如果new\u line1
或new\u line2
包含“
,则此操作无效。
请注意,这不会就地编辑文件。(实际上,
perl-i也不会,因为它会创建一个新文件。)因为您在标题中提到了awk
标准的解决方案是使用不同的分隔符。不幸的是,在awk中,您无法按照直觉编写\@pattern@
以使用@
作为分隔符,但您可以显式调用match
:
awk 'match( $0, "'$new_line1'" ) { print "'$new_line2'"; next } 1' $FILE
如果new\u line1
或new\u line2
包含“
,则此操作无效。
请注意,这不会在位编辑文件。(实际上,perl-i
,也没有,因为它创建了一个新文件。)@TLP我假设OP想要在原位更新该文件。GNUsed
提供此功能,但GNUawk
不提供此功能。@TLP我假设OP希望就地更新文件。GNUsed
提供了这种能力,但GNUawk
没有。