我使用以下命令删除 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 )
它删除了第一组括号右侧的空格和第二组括号左侧的空格。
如何修改该命令,以便它将替换整个文件每行上所有数组括号之间的空格?
答案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