最近在shell對文本進行操作,遇到了使用sed進行最小匹配的問題。sed默認匹配規則是貪婪匹配。
舉例來說,如果文本內容為:
使用sed匹配:
匹配結果為:
上述結果即貪婪匹配。
最小匹配的結果是獲取規則字符串之間的最小內容,即為:
這兩個結果。
sed獲取最小匹配的方法:
1.通過 [^str] 的方法找到最近的右側匹配規則
2.使用perl代替sed。
舉例:刪除下列字符串中的括號和括號中的內容
使用sed的默認方法(貪婪匹配):
使用第一種方法:
使用第二種方法:
另外發現,sed支持的匹配規則與perl不同,關於字符是否需要轉義也是不一樣的。例如,舉例中的 "(" 和 ")" 在sed中不需要轉義,在perl中則需要轉義。