nwi*_*ler 2 regex bash perl awk sed
我想解析.ssh/config文件中包含的代理信息,并用代理信息显示每个具有相关代理信息的主机.应该过滤掉没有任何代理信息的主机.手册页.ssh/config:http://man-wiki.net/index.php/5:sh_config
这应该在Bash下的Unix shell脚本中完成,因此首选标准工具,如Perl,awk或sed.
示例输入文件:
Host ssh.foo.com
User ssh
HostName ssh.foo.com
Port 443
ProxyCommand /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host ci
HostName 127.0.0.2
User ci
Host nightly
HostName 192.168.1.1
User goodnight
Host foobar.org
User git
HostName foobar.org
Port 443
ProxyCommand /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host integration
HostName 192.168.1.2
User int
Run Code Online (Sandbox Code Playgroud)
预期输出应如下所示:
Host: ssh.foo.com - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host: foobar.org - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Run Code Online (Sandbox Code Playgroud)
这里的困难在于搜索必须覆盖多行.
尝试以下awk命令:
awk '
$1 == "Host" {
host = $1 ": " $2;
next;
}
$1 == "ProxyCommand" {
$1 = "";
sub( /^[[:space:]]*/, "" );
printf "%s - Proxy: %s\n", host, $0;
}
' .ssh/config
Run Code Online (Sandbox Code Playgroud)
它产生:
Host: ssh.foo.com - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host: foobar.org - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Run Code Online (Sandbox Code Playgroud)