1

我想这个问题与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

我怎样才能避免它。

4

2 回答 2

4

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

perl -pi -e "s#$new_line1#$new_line2#g" $FILE
于 2012-06-18T14:22:16.913 回答
0

既然你awk在标题中提到...

标准解决方案是使用不同的分隔符。不幸的是,在 awk 中,您不能做直观的事情并编写\@pattern@用作@分隔符,但您可以显式调用match

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

如果其中一个new_line1new_line2包含一个". 请注意,这不会就地编辑文件。(perl -i实际上,它也不会创建一个新文件。)

于 2012-06-18T14:54:48.843 回答