2014-01-22 41 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