我想这个问题与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
我该如何避免它。
答案 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_line1
或new_line2
包含"
,则无效。
请注意,这不会编辑文件。 (perl -i
也没有,因为它创建了一个新文件。)