Regex 正则表达式与awk的匹配
我有点和awk混在一起,我对bash/awk还是有点陌生,所以请容忍我 当我这样做是为了寻找所有以root身份运行的进程Regex 正则表达式与awk的匹配,regex,bash,awk,Regex,Bash,Awk,我有点和awk混在一起,我对bash/awk还是有点陌生,所以请容忍我 当我这样做是为了寻找所有以root身份运行的进程 ps aux | awk '$0 ~ /.*root*./ {print $0, $11}' 它像我期望的那样打印出所有内容,但它也在底部打印出一行,其中包括我的用户名(不是root)和进程awk。为什么呢?我能怎么办 注意:我对打印出所有具有根的进程的替代解决方案并不感兴趣。我已经可以做到了。我想了解这里发生了什么,以及我如何使用它。似乎有两个问题:一个是你有*。而不是“
ps aux | awk '$0 ~ /.*root*./ {print $0, $11}'
它像我期望的那样打印出所有内容,但它也在底部打印出一行,其中包括我的用户名(不是root)和进程awk。为什么呢?我能怎么办
注意:我对打印出所有具有根的进程的替代解决方案并不感兴趣。我已经可以做到了。我想了解这里发生了什么,以及我如何使用它。似乎有两个问题:一个是你有*。而不是“根”后面的。*。另一个是搜索整行,而不仅仅是包含用户名的列 $0表示整行$1表示第一列 更接近你想要的东西是
ps aux | awk '$1 ~ /.*root.*/ {print $0, $11}'
但你也可以这样做
ps aux | awk '$1=="root" {print $0, $11}'
似乎有两个问题:一个是你有*。而不是“根”后面的。*。另一个是搜索整行,而不仅仅是包含用户名的列 $0表示整行$1表示第一列 更接近你想要的东西是
ps aux | awk '$1 ~ /.*root.*/ {print $0, $11}'
但你也可以这样做
ps aux | awk '$1=="root" {print $0, $11}'
这是你想要的吗
ps aux | awk '$0 ~ /^root/ {print $0, $11}'
之所以有“最后一行”是因为您的正则表达式是.root。。您的ps | awk行具有相同的字符串。所以它被选中了
也许你可以用grep-v“awk”来过滤你的awk行。这就是你想要的吗
ps aux | awk '$0 ~ /^root/ {print $0, $11}'
之所以有“最后一行”是因为您的正则表达式是.root。。您的ps | awk行具有相同的字符串。所以它被选中了
也许你可以使用grep-v“awk”来过滤你的awk行。来精确匹配你写的第一个字段
ps aux | awk '$1 == "root"' { print $0, $11 }'
您也可以要求ps
为您进行筛选
ps -Uroot | awk ' { print $5 } '
精确匹配您写入的第一个字段
ps aux | awk '$1 == "root"' { print $0, $11 }'
您也可以要求ps
为您进行筛选
ps -Uroot | awk ' { print $5 } '
如果只需要匹配root拥有的进程(即以字符串root开头的记录):
请注意,
/regex/
和$0~/regex/
是等效的。如果只需要匹配root拥有的进程(即以字符串root开头的记录):
请注意,
/regex/
和$0~/regex/
是等效的。避免打印awk过程的方法如下:
ps aux | awk '/[r]oot/ {print $0,$11}'
该黑客的工作原理如下:awk将搜索字符“r”“o”“o”“t”的序列。实际的awk进程不匹配,因为ps输出包含字符'[''r'']''o''o''t'序列。避免打印awk进程的方法如下:
ps aux | awk '/[r]oot/ {print $0,$11}'
该黑客的工作原理如下:awk将搜索字符“r”“o”“o”“t”的序列。实际的awk进程不匹配,因为ps输出包含字符'[''r'']''o''o''t'的序列。非常有趣。我现在明白了。为什么要搜索整条线。有没有办法只搜索一列?非常有趣。我现在明白了。为什么要搜索整条线。有没有办法只搜索一列?是的!确切地这是否使其仅搜索列?否,^root匹配该行以“root”开头。如果您想用某个值搜索某个列,请使用带有$n=xxx或$n~/exp/的awk。n这是列索引。是的!确切地这是否使其仅搜索列?否,^root匹配该行以“root”开头。如果您想用某个值搜索某个列,请使用带有$n=xxx或$n~/exp/的awk。n这是列索引。