grep无法匹配连续空白字符的正确查询语法求解
问题原因
grep 默认使用基础正则表达式(BRE)语法,你用到的{}量词、\s空白符标识都不属于默认BRE的支持范围:
{}在BRE中需要加反斜杠转义才会被识别为量词,否则会被当作普通的花括号字符匹配\s是Perl兼容正则(PCRE)的语法,默认grep不支持,需要加-P参数开启PCRE模式才可以使用
正确匹配行首多个连续空白的grep命令
你可以根据需求选择以下任意一种写法:
- 使用扩展正则模式(推荐,语法更直观)
grep -E '^[[:space:]]{2,}' file
其中^锚定行首,避免匹配到行中间的多空白内容,符合你处理行首空白的需求。
2. 基础正则模式,手动转义量词
grep '^[[:space:]]\{2,\}' file
- 开启PCRE模式使用
\s语法
grep -P '^\s{2,}' file
一步完成删除行首多余空白的需求
如果你的最终目标是直接清理行首空白,不需要先匹配再处理,用sed可以直接完成操作:
# Linux环境直接修改原文件 sed -i 's/^[[:space:]]*//' file # MacOS环境需加空后缀参数 sed -i '' 's/^[[:space:]]*//' file
内容的提问来源于stack exchange,提问作者Yehuda
相关产品推荐
相关产品推荐

