2

我想在其中找到所有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*意味着任意数量的空格。这种行为有什么原因吗?谢谢你。

4

1 回答 1

5

\s确实意味着空格,并且\s*确实意味着零个或多个空格,但在 awk 中没有。

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

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

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

如果你想要一个单词锚定,google那么你想要/\<google\>/.

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

于 2015-06-29T22:33:01.420 回答