如何避免awk中的转义字符

时间:2012-06-18 14:18:00

标签: 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/1234/567"
syntax error at -e line 1, near "s/1234567/1234/567"

因为bash假设perl -pi -e "s/1234567/1234**/**567/g" $FILE

我该如何避免它。

2 个答案:

答案 0 :(得分:4)

如果您不想转义,请使用/中的其他分隔符:

perl -pi -e "s#$new_line1#$new_line2#g" $FILE

答案 1 :(得分:0)

因为你在标题中提到awk ......

标准解决方案是使用不同的分隔符。不幸的是,在awk中你不能做直观的事情并写\@pattern@来使用@作为分隔符,但你可以明确地调用match

awk 'match( $0, "'$new_line1'" ) { print "'$new_line2'"; next } 1' $FILE

如果new_line1new_line2包含",则无效。 请注意,这不会编辑文件。 (perl -i也没有,因为它创建了一个新文件。)