여러 패턴의 패턴을 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 )

첫 번째 대괄호 세트 오른쪽에 있는 공백과 두 번째 대괄호 세트 왼쪽에 있는 공백을 제거합니다.

전체 파일의 각 줄에서 배열 괄호 사이의 모든 공백을 바꾸도록 이 명령을 어떻게 수정합니까?

답변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

관련 정보