をファイルの束として<?php
にプログラムで置き換えようとしていますが、sed正規表現が期待どおりに動作していません。あなたは何が間違っているのか教えていただけますか?sedを使用して<? <?php
私はここに、コマンドライン上でそれをテストしています:
$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php
をファイルの束として<?php
にプログラムで置き換えようとしていますが、sed正規表現が期待どおりに動作していません。あなたは何が間違っているのか教えていただけますか?sedを使用して<? <?php
私はここに、コマンドライン上でそれをテストしています:
$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php
を私はあなたのエスケープを必要とは思わない:?
sed -e 's/<?/<?php/g'
を読み取ることは不可能であること。 –
はい、あなたはそうしていると思います。あなたが投稿した解決策は、オプションの<、リテラルではない<? –
多分sedのバージョンに依存しますが、使用しているバージョンの '\?'はオプションの文字限定子です。 http://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html –
あなたが本当にsedを使用する必要があります、またはperlも使用できますか?
perl -pi.tmp -e 's,^<\?(?!php),<?php,' *.php *.inc
rm *.tmp
私は、ファイルが既に正しい文字で始まる場合に<?phpphp
の発生を回避するために、負の先読みを使用しています。
交換時にバックリファレンスをエスケープする必要はありません。パイプで
sed 's#<\?#<?php#'
、PHPを倍増するために修正する:
sed 's#<\?#<?php#g' | sed 's#phpphp#php#g'
あなたの入力は何ですか、あなたの出力何である - 「テストケースは、」確かにそうしない –