Hun*_*nle 2 regex macos awk lsof
我想在其中找到lsof"Google"中的所有行,所以我尝试了以下内容:
lsof | awk '/.*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv
Run Code Online (Sandbox Code Playgroud)
这会正确地产生一个以"google"开头的行的输出.
但是,然后我尝试这个,而csv什么都不包含:
lsof | awk '/\s*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv
Run Code Online (Sandbox Code Playgroud)
但是,我认为这\s*意味着任意数量的空间.这种行为有什么理由吗?谢谢.
\s确实意味着空间并且\s*意味着零或多空间但不是awk.
awk使用不同的(较旧的)正则表达式引擎.
对于awk,您希望[[:space:]]*匹配零或多个空格.(这[:space:]是字符列表中的字符类类[].)
如果你只是关心google在输出中那么你应该说/google/.
如果你想要一个单词锚定,google那么你想要/\<google\>/.
正如Ed Morton所指出的那样,GNU Awk版本4.0+也增加了对\s元字符的支持.