Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash 试图理解sed脚本中的嵌套括号_Bash_Shell_Sed - Fatal编程技术网

Bash 试图理解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/ 如果您是指(\(.*\)中的嵌套括号。外部对是

我正试图理解上述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/

如果您是指
(\(.*\)
中的嵌套括号。外部对是文本,内部转义对捕获由封闭正则表达式匹配的字符串。反向引用
\1
输出此捕获的字符串。
\2
反向引用输出第二对转义括号捕获的字符串

如果你指的是大括号,它们围绕着命令块。外部组表示,如果行与
^Host.*latency.*
匹配,则执行附带的命令。<代码>$!N如果当前行不是最后一行,则命令会追加文件的下一行。如果行的组合匹配
MAC地址
,则执行下一对花括号内的块(执行替换)

你可以这样读:

  • /^Host.*latency.*/{
    -如果行与此正则表达式匹配,则
    • $!N
      -如果当前行不是最后一行,则追加下一行
    • /MAC Address/{
      -如果组合行与此正则表达式匹配,则
      • s/*(\(.*\).*MAC地址:\(.*\)./\1->\2/
        -进行此替换
    • }
      -如果
  • }
    -如果
  • /[Nn]map/d
    -如果图案空间(组合线)与此匹配,则将其删除
  • s/^Host.*已启动/&但找不到MAC地址/
    -进行此替换

谢谢你的精彩解释。还有一个问题是什么编程语言,我不知道它是sed脚本、shell、awk还是perl?@RegisteredUser:我不确定我是否理解你的问题,因为你将原始问题命名为“…sed脚本”。是的,它是一个
sed
脚本。
nmap -sP 192.168.1.0/20 | sed -f sedcript.sh