我想找到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*
表示任意数量的空格。这种行为有什么理由吗?谢谢。
答案 0 :(得分:5)
\s
表示空格,\s*
表示零或多空格,但不是awk。
awk使用不同的(较旧的)正则表达式引擎。
对于awk,您希望[[:space:]]*
匹配零或多个空格。 (这是字符列表[:space:]
中的[]
字符类类。)
如果您只关心google
在输出中,那么您只需要/google/
。
如果您想要一个单词锚定的google
,那么您需要/\<google\>/
。
正如Ed Morton所指出的那样,GNU Awk版本4.0+也增加了对\s
元字符的支持。