
거대한 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
이는 필수 문자가 아님 을 \?
의미합니다 . ,
존재하지 않는 경우에도 여전히 일치 항목이 있습니다.