/^Host.*latency.*/{
$!N
/MAC Address/{
s/.*(\(.*\)) .*MAC Address: \(.*\) .*/\1 -> \2/
}
}
/[Nn]map/d
s/^Host .*is up/& but MAC Address cannot be found/
我试图理解上面的sed脚本。可以帮助我理解我从未使用过如上所述的sed。 它的用途是
nmap -sP 192.168.1.0/20 | sed -f sedcript.sh
答案 0 :(得分:3)
如果您的意思是(\(.*\))
中的嵌套括号。外部对是文字的,内部的转义对捕获由封闭的正则表达式匹配的字符串。反向引用\1
输出此捕获的字符串。 \2
反向引用输出由第二对转义括号捕获的字符串。
如果你的意思是花括号,它们会围绕命令块。外部组表示如果该行匹配^Host.*latency.*
,则执行随附的命令。如果当前行不是最后一行,$!N
命令会附加文件的下一行。如果行的组合与MAC Address
匹配,则执行下一对花括号内的块(执行替换)。
你可以这样读:
/^Host.*latency.*/{
- 如果该行与此正则表达式匹配,那么
$!N
- 如果当前行不是最后一行,则附加下一行/MAC Address/{
- 如果组合的行匹配此正则表达式,则
s/.*(\(.*\)) .*MAC Address: \(.*\) .*/\1 -> \2/
- 进行此替换}
- 如果}
- 如果/[Nn]map/d
- 如果模式空间(组合线)与此匹配,则将其删除s/^Host .*is up/& but MAC Address cannot be found/
- 进行此替换