regex - 为什么我不能将 ^\s 与 grep 一起使用?
问题描述
在我的情况下,下面的两个正则表达式都有效。
grep \s
grep ^[[:space:]]
但是,以下所有这些都失败了。我在 git bash 和 putty 中都试过了。
grep ^\s
grep ^\s*
grep -E ^\s
grep -P ^\s
grep ^[\s]
grep ^(\s)
最后一个甚至会产生语法错误。
如果我^\s
在 debuggex 中尝试它可以工作。
如何找到以空格字符开头的行grep
?我必须使用[[:space:]]
吗?
解决方案
grep \s
适合您,因为您的输入包含s
. 在这里,您转义s
并匹配s
,因为它没有被解析为匹配正则表达式转义的空格。如果您使用grep ^\\s
,您将匹配以空格开头的字符串,因为\\
它将被解析为文字\
字符。
一个更好的主意是启用 POSIX ERE 语法-E
并引用该模式:
grep -E '^\s' <<< "$s"
查看在线演示:
s=' word'
grep ^\\s <<< "$s"
# => word
grep -E '^\s' <<< "$s"
# => word
推荐阅读
- linux - Azure Linux 应用服务不显示应用程序日志
- r - 如何制作一个函数来制作一个复杂的欧拉图?
- python - 比较当前和前一帧照片 - Python
- asp.net - 从内部网站为 ASP.NET Core 添加用户
- angular - 如何在 IIS 中构建和配置 Angular 12 子应用程序?
- java - 通过 Java 策略文件设置权限 Hibernate Validator 等
- c - 如何将 uint32_t 数字移动到 char[]?
- spring - 如何使用 org.springframework.format.Formatter.print()
- r - R中的下采样
- java - 如何在mac m1上设置jdk 8?