Sed 명령을 파이프하는 방법은 무엇입니까?

Sed 명령을 파이프하는 방법은 무엇입니까?

매우 안정적으로 WordPress 데이터베이스를 가져오는 bash 스크립트가 있지만 내 사이트 중 하나가 이전 WordPress 다중 사이트에서 왔기 때문에 데이터베이스에 DEFINERS가 포함되어 있어 다음 코드가 올바르게 실행되지 않습니다.

gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name

위의 결과는ERROR 1227 (42000) at line 3224: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation

데이터베이스를 수동으로 내보내고 를 실행한 sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i db-export.sql다음 데이터베이스 가져오기를 시도하면 데이터베이스를 성공적으로 가져오고 사용자 이름 바꾸기를 검색하여 라이브 사이트로 만들 수 있습니다.

질문:
정의자 문제를 제거하기 위해 현재 db import 명령과 sed 명령을 결합하는 올바른 구문은 무엇입니까? 내가 달성하고 싶은 것은 다음과 같습니다.

분명히 정확하지는 않지만 요점은 알 수 있습니다 ...

gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | `sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i db-export.sql | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name

어떤 팁이 있나요?

감사해요


답변1

sed이 경우 파일에서 오는 데이터 대신 파일에서 오는 데이터를 처리하려고 합니다 . gunzip파일 이름을 생략하면 행복하게 읽을 수 있습니다.표준 입력(즉, 에서 gunip) 그리고 다음 주소에 씁니다.표준 출력(지금 바로 mysql).

읽기 쉽도록 세 줄로 나누었습니다. 여전히 다음과 같이 작동하지만 정말로 원한다면 다음 줄을 함께 연결할 수 있습니다.

gunzip -c "$destination_path_to_wordpress/folder/db-export.sql.gz" |
    sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' |
    mysql -u "$destination_db_user" -p"$destination_db_pass" "$destination_db_name"

관련 정보