Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式与awk的匹配_Regex_Bash_Awk - Fatal编程技术网

Regex 正则表达式与awk的匹配

Regex 正则表达式与awk的匹配,regex,bash,awk,Regex,Bash,Awk,我有点和awk混在一起,我对bash/awk还是有点陌生,所以请容忍我 当我这样做是为了寻找所有以root身份运行的进程 ps aux | awk '$0 ~ /.*root*./ {print $0, $11}' 它像我期望的那样打印出所有内容,但它也在底部打印出一行,其中包括我的用户名(不是root)和进程awk。为什么呢?我能怎么办 注意:我对打印出所有具有根的进程的替代解决方案并不感兴趣。我已经可以做到了。我想了解这里发生了什么,以及我如何使用它。似乎有两个问题:一个是你有*。而不是“

我有点和awk混在一起,我对bash/awk还是有点陌生,所以请容忍我

当我这样做是为了寻找所有以root身份运行的进程

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这是列索引。