最近在shell对文本进行操作,遇到了使用sed进行最小匹配的问题。sed默认匹配规则是贪婪匹配。
举例来说,如果文本内容为:
使用sed匹配:
匹配结果为:
上述结果即贪婪匹配。
最小匹配的结果是获取规则字符串之间的最小内容,即为:
这两个结果。
sed获取最小匹配的方法:
1.通过 [^str] 的方法找到最近的右侧匹配规则
2.使用perl代替sed。
举例:删除下列字符串中的括号和括号中的内容
使用sed的默认方法(贪婪匹配):
使用第一种方法:
使用第二种方法:
另外发现,sed支持的匹配规则与perl不同,关于字符是否需要转义也是不一样的。例如,举例中的 "(" 和 ")" 在sed中不需要转义,在perl中则需要转义。