Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
Awk 如何正确创建别名_Awk_Alias_Bash - Fatal编程技术网

Awk 如何正确创建别名

Awk 如何正确创建别名,awk,alias,bash,Awk,Alias,Bash,我已经测试了这个命令 $ nmap -sP 192.168.1.* | grep 192 | awk '{print $5}' 它产生这个输出 192.168.1.1 192.168.1.33 192.168.1.34 192.168.1.36 192.168.1.41 Nmap scan report for 192.168.1.1 Nmap scan report for 192.168.1.33 Nmap scan report for 192.168.1.34 Nmap scan

我已经测试了这个命令

$ nmap -sP 192.168.1.* | grep 192  | awk '{print $5}'
它产生这个输出

192.168.1.1
192.168.1.33
192.168.1.34
192.168.1.36
192.168.1.41
Nmap scan report for 192.168.1.1
Nmap scan report for 192.168.1.33
Nmap scan report for 192.168.1.34
Nmap scan report for 192.168.1.36
Nmap scan report for 192.168.1.41
然后将其添加到我的.bash_别名文件中,然后将其来源

# This alias shows IPs on the local network
alias list-ip="nmap -sP 192.168.1.* | grep 192  | awk '{print $5}'"
但它会产生这种输出

192.168.1.1
192.168.1.33
192.168.1.34
192.168.1.36
192.168.1.41
Nmap scan report for 192.168.1.1
Nmap scan report for 192.168.1.33
Nmap scan report for 192.168.1.34
Nmap scan report for 192.168.1.36
Nmap scan report for 192.168.1.41

我不知道我在做什么。我只希望输出与我在命令行上运行时一样,而且应该是这样。

您使用双引号,因此
$5
在设置别名时展开。试一试

 alias list-ip="nmap -sP 192.168.1.* | grep 192  | awk '{print \$5}'"
注意

 alias list-ip='nmap -sP 192.168.1.* | grep 192  | awk "{print $5}"'
将无法工作,因为此时在运行别名时仍会进行扩展

您还可以摆脱
awk
,例如:

 alias list-ip='nmap -sP 192.168.1.* | grep -o "192[0-9.]*"'

您使用双引号,因此
$5
在设置别名时展开。试一试

 alias list-ip="nmap -sP 192.168.1.* | grep 192  | awk '{print \$5}'"
注意

 alias list-ip='nmap -sP 192.168.1.* | grep 192  | awk "{print $5}"'
将无法工作,因为此时在运行别名时仍会进行扩展

您还可以摆脱
awk
,例如:

 alias list-ip='nmap -sP 192.168.1.* | grep -o "192[0-9.]*"'


我认为名称
列表ip
不合适,你能试着用
列表ip
之类的东西来避免
-
吗?@fedorqui不,在
bash
中,破折号在函数名/别名中很好。嗯,很高兴知道,@AdrianFrühwirth,我想不是。谢谢<代码>grep | awk从来都不需要,只要做
nmap-sP 192.168.1.*| awk'/192/{print$5}'
同样,你可能应该使用“^192\”作为你的正则表达式。我不认为名称
列表ip
是可以的,你能试着用
列表ip
之类的东西来避免
-
吗?@fedorqui No,在
bash
中,破折号在函数/别名中很好。嗯,很高兴知道,@AdrianFrühwirth,我想不是。谢谢<代码>grep | awk永远都不需要,只需执行
nmap-sP 192.168.1.*| awk'/192/{print$5}'
此外,您可能应该使用`^192\.`作为正则表达式。正则表达式选项听起来很棒!或者去掉grep,那么即使您没有可用的GNU grep,您的解决方案也会起作用,更重要的是,如果nmap输出中的其他地方出现“192”,它也不会找到错误的匹配项:`alias list ip=“nmap-sP 192.168.1.*|awk'\$5~/^192\/{print\$5}@EdMorton我完全同意最好不要依赖GNU
grep
,但我不同意误报,因为如果
nmap
能够反向解析IP,它的输出看起来就不同了(例如
nmap-scan-report for-mybox(192.168.x.y)
),在这种情况下,第5列不是您想要的。您可以更改
awk
来解释这一点,但我认为如果它的输出是另一种语言(我相信它支持这种语言),那么它更可读,也更健壮。@AdrianFrühwirth-我不知道“nmap”是什么,我所要做的就是OP发布的示例输出,但他没有发布grep/awk的输入是什么样子的,所以我的猜测工作就是如何编写grep/awk来解析它。我担心的是,如果“nmap”可以生成包含“168.192.x.y”的输出,那么grep命令将错误地匹配它(假设OP只需要以192开头的IP地址)。regex选项听起来很棒!或者去掉grep,那么即使您没有可用的GNU grep,您的解决方案也会起作用,更重要的是,如果nmap输出中的其他地方出现“192”,它也不会找到错误的匹配项:`alias list ip=“nmap-sP 192.168.1.*|awk'\$5~/^192\/{print\$5}@EdMorton我完全同意最好不要依赖GNU
grep
,但我不同意误报,因为如果
nmap
能够反向解析IP,它的输出看起来就不同了(例如
nmap-scan-report for-mybox(192.168.x.y)
),在这种情况下,第5列不是您想要的。您可以更改
awk
来解释这一点,但我认为如果它的输出是另一种语言(我相信它支持这种语言),那么它更可读,也更健壮。@AdrianFrühwirth-我不知道“nmap”是什么,我所要做的就是OP发布的示例输出,但他没有发布grep/awk的输入是什么样子的,所以我的猜测工作就是如何编写grep/awk来解析它。我担心的是,如果“nmap”可以生成包含“168.192.x.y”的输出,那么grep命令将错误地匹配它(假设OP只需要以192开头的IP地址)。