![Sed 명령을 파이프하는 방법은 무엇입니까?](https://linux55.com/image/210863/Sed%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%8C%8C%EC%9D%B4%ED%94%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
매우 안정적으로 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"