我正在尝试使用sed数字后跟一个点(例如3., 355.)和一个空字符串来替换所有模式。所以我尝试:
sed 's/\d+\.//g' file.txt
Run Code Online (Sandbox Code Playgroud)
但它不起作用。这是为什么?
gle*_*man 166
因为 sed 不是 perl —— sed 正则表达式没有\d速记:
sed 's/[[:digit:]]\+\.//g'
Run Code Online (Sandbox Code Playgroud)
sed 正则表达式文档在这里。
cho*_*oba 101
两个问题:
sed不支持\d。使用[0-9]或[[:digit:]]。
+必须反斜杠才能获得特殊含义:\+.
ti7*_*ti7 12
几年后添加到其他答案中,我发现我想要更复杂的正则表达式的扩展功能
这仅需要+一个或多个,并且通常使我的情况和这个情况下的字符串对我来说更加明显
# NOTE \d is not supported
sed --regexp-extended 's/[0-9]+\.//g'
Run Code Online (Sandbox Code Playgroud)
使用sed4.7
小智 6
sed 手册页引用了 re_format 手册页。它有两个区别:(1) 过时的与扩展的正则表达式;(2) 非增强型与增强型正则表达式。所有 4 种组合都是可能的。sed 支持过时和扩展,但在任何一种情况下都只支持非增强。\d 运算符是增强型正则表达式的一项功能,因此不受 sed 支持。