2014-07-11 52 views
0

我试图找出如何通过sed来替换第一个匹配项(搜索/替换)的匹配项。我想要它逐行(我认为这是sed的默认值)。替换行中的第一个匹配项

这里是我的数据集:

(4320, 38, '101.1.168.192.in-addr.arpa', 'PTR', 'test1.example.com', 3600, NULL, 1377614683), 
(4321, 38, '102.1.168.192.in-addr.arpa', 'PTR', 'test2.example.com', 3600, NULL, 1377614683), 
(4322, 38, '103.1.168.192.in-addr.arpa', 'PTR', 'test3.example.com', 3600, NULL, 1377614683), 
(4323, 38, '104.1.168.192.in-addr.arpa', 'PTR', 'test4.example.com', 3600, NULL, 1377614683), 

这仅仅是一个剪断–这是一个巨大的名单。我想为每一行取出第一个数字,具体查找([0-9],(,。这样我就可以默认分配这个SQL语句的值,因为我将把这个数据集导入到一个表中(这可能与auto_increment值有冲突)。

下面是我想它看起来做的时候像:

(, 38, '101.1.168.192.in-addr.arpa', 'PTR', 'test1.example.com', 3600, NULL, 1377614683), 
(, 38, '102.1.168.192.in-addr.arpa', 'PTR', 'test2.example.com', 3600, NULL, 1377614683), 
(, 38, '103.1.168.192.in-addr.arpa', 'PTR', 'test3.example.com', 3600, NULL, 1377614683), 
(, 38, '104.1.168.192.in-addr.arpa', 'PTR', 'test4.example.com', 3600, NULL, 1377614683) 

我相信会的工作。我已经尝试了一些sed命令,但它们似乎都将整个比赛都删除直到线的末端(因为我匹配我匹配的内容,它基本上删除了每个[0-9].*,)。

+3

请发表你的命令,你试过 – Teja

回答

3

你可以试试下面的GNU sed的命令,

$ sed -r 's/^\([0-9]+/(/' file 
(, 38, '101.1.168.192.in-addr.arpa', 'PTR', 'test1.example.com', 3600, NULL, 1377614683), 
(, 38, '102.1.168.192.in-addr.arpa', 'PTR', 'test2.example.com', 3600, NULL, 1377614683), 
(, 38, '103.1.168.192.in-addr.arpa', 'PTR', 'test3.example.com', 3600, NULL, 1377614683), 
(, 38, '104.1.168.192.in-addr.arpa', 'PTR', 'test4.example.com', 3600, NULL, 1377614683), 
+0

我想说结束'g'无关这里做,即使它不应该打破命令。 – Qeole

+0

@Qeole yep,纠正.. –

+0

这很好。谢谢你。我结束了使用这个,然后补充地用于不同的形式来改变我知道我需要在数据库中引用的当前特定数字。这使我能够以很少的执行时间导入大约400条SQL条目。真的很感激它。 – drewrockshard

相关问题