2013-10-10 33 views
0

我有以下代碼:egrep的:在起點和終點之間的正則表達式

egrep -v "(^/\*\!40101.*\*/;$|^/\*\!50001.*\*/;$)" 

,將工作的罰款跳過的文字是這樣的:

/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
/*!50001 DROP TABLE IF EXISTS `some_table_name`*/; 

但是如果我有文字是這樣的:

/*!50001 CREATE TABLE `some_table_name` (
    `id` int(11), 
    `field1` char(30), 
    `field2` char(30), 
) ENGINE=MyISAM */; 

它未能跳過它。任何想法?

我要的是:

,如果有一個文本

Start with : /*!40101 
End with : */; 

,如果有一個文本

Start with : /*!50001 
End with : */; 

我想跳過整條生產線,或它的整個塊。任何想法如何做到這一點?

+0

你爲什麼想這樣做?它的mysqldump,mysql使用這些特殊註釋是有原因的。 –

回答

0

您的正則表達式會跳過所有以40101或50001開頭的所有內容,直到行的末尾,而不是到下一行。它看起來不像egrep支持多行匹配。

+0

增加了該問題的附加信息。 – Teddybugs

+0

看起來模式需要在行結束前匹配。 – Spaceghost

+0

該怎麼辦?我只能匹配他們,如果他們在1行,如何做匹配幾行 – Teddybugs