2014-01-22 19 views
1

我在写一个shell脚本来修改文件匹配第一次出现,我有一条线是这样的吧:sed的 - 在搜索

sed的S /这里\(。* \ n \)/ 1/g

不幸的是,搜索似乎匹配最长的字符串(即它一直到最后\ n - 因此给我一个替换),但我希望它只匹配直到第一个\ n它发现(所以我可以在每一行都取代)。

这可能吗?

感谢您的帮助!

+1

请提供示例文件来处理您的命令,预期和实际输出。 – vbo

+0

不幸的是,我现在在接下来的6个小时内已经远离那台电脑。但基本的想法是这样的:如果str =“dadbcbcbc”,我在str中搜索:a。* b似乎与adbcbcb匹配,但我希望它匹配adb。 – user825067

回答

0

看起来像你想要的功能non-greedy (or lazy)匹配。不幸的是sed不提供这样的功能。要模拟它,您需要搜索任何东西,除了分隔符匹配直到分隔符匹配。像这样:

s/here \([^\n]*\n\)/gone \1/g 
+0

很好的回答。谢谢! [^ \ n] *看起来很完美。我今晚会测试它,没有任何消息意味着好消息。 :) – user825067

+0

@ user825067你试过我的建议吗? – vbo

+0

是的,它工作正常。非常感谢你。 (没有消息意味着一切都很好。)但贪婪的匹配似乎提出了一个有趣的问题:假设str =“aabcdbc”,我搜索str为“a。* b。* d”。这个搜索是否会失败,因为.b匹配abcdb? – user825067