複数のパターンのパターンをsedに置き換える方法

複数のパターンのパターンをsedに置き換える方法

次のコマンドを使用して、PHPファイルから文字列または整数の配列キー間の周囲のスペースを削除します。

sed -ri "s/\[ ([0-9]+|(\x27|\x22).*(\x27|\x22)) \]/[\1]/g" file.php

私はすべての基盤を扱ったと思いましたが、同じ行に複数の配列括弧がある場合は失敗するので、次のようになります。

if ( $myarray[ 'id' ] == 7 && $myarray[ 'status' ] == true )

次のようになります。

if ( $myarray['id' ] == 7 && $myarray[ 'status'] == true )

次のように表示する必要があります。

if ( $myarray['id'] == 7 && $myarray['status'] == true )

最初の角かっこセットの右側のスペースと2番目の角かっこセットの左側のスペースを削除します。

ファイル全体の各行の配列括弧の間のすべてのスペースを置き換えるようにこのコマンドをどのように変更しますか?

ベストアンサー1

問題は、.*'または'以外のすべての文字と一致する場合に機能します。sed -ri "s/\[ ([0-9]+|(\x27|\x22)[^\x27\x22]*(\x27|\x22)) \]/[\1]/g" file.php

より良い方法は次のとおりです(可能な「または」を考慮)。

sed -ri "s/\[ ([0-9]+|(\x27|\x22)[^\2]*(\2)) \]/[\1]/g" file.php

おすすめ記事