在Mac终端中使用lsof和awk的奇怪行为?

时间:2015-06-29 22:28:49

标签: regex macos awk lsof

我想找到lsof中包含“Google”的所有行,所以我尝试了以下内容:

lsof |  awk '/.*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv

正确地生成带有以“google”开头的行的输出。

但是,然后我尝试了这个并且csv什么都不包含:

lsof |  awk '/\s*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv

但是,我认为\s*表示任意数量的空格。这种行为有什么理由吗?谢谢。

1 个答案:

答案 0 :(得分:5)

\s表示空格,\s*表示零或多空格,但不是awk。

awk使用不同的(较旧的)正则表达式引擎。

对于awk,您希望[[:space:]]*匹配零或多个空格。 (这是字符列表[:space:]中的[]字符类类。)

如果您只关心google在输出中,那么您只需要/google/

如果您想要一个单词锚定的google,那么您需要/\<google\>/

正如Ed Morton所指出的那样,GNU Awk版本4.0+也增加了对\s元字符的支持。