Bash 试图理解sed脚本中的嵌套括号
我正试图理解上述sed脚本。有人能帮助我理解我从未使用过上述sed脚本吗。 它的用途是Bash 试图理解sed脚本中的嵌套括号,bash,shell,sed,Bash,Shell,Sed,我正试图理解上述sed脚本。有人能帮助我理解我从未使用过上述sed脚本吗。 它的用途是 /^Host.*latency.*/{ $!N /MAC Address/{ s/.*(\(.*\)) .*MAC Address: \(.*\) .*/\1 -> \2/ } } /[Nn]map/d s/^Host .*is up/& but MAC Address cannot be found/ 如果您是指(\(.*\)中的嵌套括号。外部对是
/^Host.*latency.*/{
$!N
/MAC Address/{
s/.*(\(.*\)) .*MAC Address: \(.*\) .*/\1 -> \2/
}
}
/[Nn]map/d
s/^Host .*is up/& but MAC Address cannot be found/
如果您是指
(\(.*\)
中的嵌套括号。外部对是文本,内部转义对捕获由封闭正则表达式匹配的字符串。反向引用\1
输出此捕获的字符串。\2
反向引用输出第二对转义括号捕获的字符串
如果你指的是大括号,它们围绕着命令块。外部组表示,如果行与^Host.*latency.*
匹配,则执行附带的命令。<代码>$!N如果当前行不是最后一行,则命令会追加文件的下一行。如果行的组合匹配MAC地址
,则执行下一对花括号内的块(执行替换)
你可以这样读:
-如果行与此正则表达式匹配,则/^Host.*latency.*/{
-如果当前行不是最后一行,则追加下一行$!N
-如果组合行与此正则表达式匹配,则/MAC Address/{
-进行此替换s/*(\(.*\).*MAC地址:\(.*\)./\1->\2/
-如果}
-如果}
-如果图案空间(组合线)与此匹配,则将其删除/[Nn]map/d
-进行此替换s/^Host.*已启动/&但找不到MAC地址/
sed
脚本。
nmap -sP 192.168.1.0/20 | sed -f sedcript.sh