0

私はUbuntu Nattyを使用しています。

コマンドライン perl を使用してテキスト ファイルを編集しようとしています。以下は私のコードのスニペットです:

path_to_php_exec="/usr/local/php/bin/php"
path_to_php_prog="/root/run/php_gearman_worker.php"
perl -0777 -i -pe "s/(command[ ]*=[ ]*)[^\n]+/\${1}=$path_to_php_exec $path_to_php_prog\n/g" /etc/supervisord_program_gearman.conf

ただし、これを実行すると、次のエラーが発生します

Bareword found where operator expected at -e line 1, near "s/(command[ ]*=[ ]*)[^\n]+/${1}=/usr"
Backslash found where operator expected at -e line 1, near "php\"
syntax error at -e line 1, near "s/(command[ ]*=[ ]*)[^\n]+/${1}=/usr"
Execution of -e aborted due to compilation errors.

シェル変数のスラッシュと関係があるような気がしますが、よくわかりません。コマンド ライン スクリプトについては、まだ初心者のようです。

助けていただければ幸いです。

ありがとう。

4

1 に答える 1

0

はい、まさにその通りです。s///Perl のコマンドにはさまざまな区切り文字を選択できます。また、あなたの正規表現は行指向なので、ファイルを行ごとに解析してみませんか?

perl -i -pe \
    "$(printf 's{(command\s*=\s*).*}{$1 %s %s}g' "$path_to_php_exec" "$path_to_php_prog")" \
    /etc/supervisord_program_gearman.conf

出力ファイルで等号を二重にしたくないと思うので、置換ブロックから削除しました。

于 2012-05-17T19:22:51.207 に答える