1

この質問はawkに関連していると思います。私はawkの経験がありません。いろいろ試してみましたが、解決策が見つかりませんでした。

実際、私はファイルを1行ずつ読み取り、その行全体を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_line1またはnew_line2が含まれている場合、これは機能しません"。これはその場でファイルを編集しないことに注意してください。perl -i(実際には、新しいファイルを作成するので、 どちらも行いません。)

于 2012-06-18T14:54:48.843 に答える