sed: 이 쉼표 또는 저것과 일치하지만 동시에 둘 다 일치하지는 않습니다.

sed: 이 쉼표 또는 저것과 일치하지만 동시에 둘 다 일치하지는 않습니다.

거대한 mysql 덤프가 있고 sed를 사용하여 원하지 않는 행을 삭제하고 있으며(테이블에서 삭제하는 것보다 훨씬 빠릅니다) 덤프의 각 행은 다음 형식입니다.

 INSERT INTO table_name VALUES ("somevalue", 0), ("anothervalue", 90), ("nospaces", 67), ("another", 0) ... ;

정수 값이 0인 행만 필요하므로 다음 표현식을 사용합니다.

 sed -i 's/, ("[^ ]*", [1-9][0-9]*)//g' dump.sql

그러나 이것은 첫 번째 줄과 일치하지 않습니다(표현식의 쉼표 참조).. 어쨌든 선행 또는 후행 쉼표 중 하나만 일치할 수 있지만 둘 다 일치할 수는 없습니까?

답변1

,전자에 의존하지 말고 ()후자에 의존하는 것이 좋습니다 \?. 어쨌든 공간이 하나인지 여러 개인지는 중요하지 않습니다. 비슷한 일이 당신에게도 도움이 될 것입니다:

sed -i 's/("[^ ]*", [1-9][0-9]*),\?//g; s/,\s*;/;/' dump.sql

이는 필수 문자가 아님 을 \?의미합니다 . ,존재하지 않는 경우에도 여전히 일치 항목이 있습니다.

관련 정보