为什么默认情况下不使用扩展正则表达式模式进行sed?


10

我正在使用sed。据我所知,我使用的正则表达式是正确的,但是sed并没有做任何事情。原来,我使用的是\s+哪个sed无法理解,并且当我切换到[ ]+它时起作用。

综上所述,我做了一个正则表达式,要使其正常工作,我必须转义几乎所有内容并删除\s空白。似乎有一种避免所有这些情况的模式,-r所以我想问一下:

  1. 为什么不-r设置sed的默认模式?为什么我不得不费很大的劲才能逃脱一切?
  2. man表示存在该选项--posix,并且“应该支持POSIX.2 BRE”是什么意思?NFA / DFA模式?

顺便说一句,匹配空白像Perl的\s+使用[[:space:]][:space:]]*在BRE和相同或[[:space:]]+在ERE。
jrm 2016年

Answers:


10

关于1)答案与数十年来改进的任何其他工具相同。:)

您不想通过更改默认行为来破坏现有脚本。

2)与匹配引擎无关;这只是支持哪种正则表达式的问题。POSIX BRE的意思是“基本正则表达式”。


那第二点呢?
2014年

编辑有帮助吗?
天衣

1

关于点2:默认情况下gnu sed使用GNU BRE。要使用POSIX,BRE您应该指定--posix

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.