sed는 일치 전후에 문자열을 대체합니다.

sed는 일치 전후에 문자열을 대체합니다.

몇 줄(기본적으로 MySQL 쿼리)이 포함된 파일이 있습니다.

예를 들어:

GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*A576A2D299CFAF43CE15363F20BDD260FC1E9F77' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*CE15363F20BA576F43DD260FC1E9F77A2D299CFA';

IDENTIFIED및로 시작하는 모든 문자를 제거하고 싶습니다.두 번째 작은따옴표 앞에.

예상 출력:

GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%';

AWK 또는 SED 명령이 있습니까?

답변1

요청한 내용(IDENTIFIED로 시작하고 두 번째 작은따옴표 앞의 모든 문자 제거):

$ sed "s/IDENTIFIED[^']*'[^']*//" file
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' ' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' ';

실제로 예상한 결과가 생성됩니다.

$ sed "s/ *IDENTIFIED.*'//" file
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%';

관련 정보