为什么不能grep -E
像我期望的那样对负空格起作用?IE[^\s]+
我写了一个正则表达式来解析我的 .ssh/config
grep -Ei '^host\s+[^*\s]+\s*$' ~/.ssh/config
# cat ~/.ssh/config
Host opengrok-01-Eight
Hostname opengrok-01.company.com
Host opengrok-02-SIX
Hostname opengrok-02.company.com
Host opengrok-03-forMe
Hostname opengrok-03.company.com
Host opengrok-04-ForSam
Hostname opengrok-04.company.com
Host opengrok-05-Okay
Hostname opengrok-05.company.com
Host opengrok-05-Okay opengrok-03-forMe
IdentityFile /path/to/file
Host opengrok-*
User root
Run Code Online (Sandbox Code Playgroud)
我得到的是
Host opengrok-01-Eight
Host opengrok-03-forMe
Host opengrok-05-Okay
Host opengrok-05-Okay opengrok-03-forMe
Run Code Online (Sandbox Code Playgroud)
六和山姆在哪里!
我花了一些时间才意识到[^\s*]+
ie 匹配任何不是空白或*
, 1 次或多次实际上是匹配任何不是\
,s
或*
1 次或多次!
修复非常简单,因为该正则表达式适用于 rex101.com(使用 perl),即切换-E
为-P
# grep -Pi '^host\s+[^*\s]+\s*$' ~/.ssh/config …
Run Code Online (Sandbox Code Playgroud)