有没有可以让我在文本文件中的一组行的开头添加字符串的函数?

时间:2019-04-07 18:15:32

标签: bash awk sed

我正在尝试将IP地址(在下面的屏幕截图中)放在每一行的开头,以获取相对结果。

Text File showing current format of results

当前文件格式:

Host: 192.168.1.4 ()    
21  open    tcp     ftp     vsftpd 2.3.4    
23  open    tcp     telnet      Linux telnetd   
25  open    tcp     smtp        Postfix smtpd   
53  open    tcp     domain      ISC BIND 9.4.2    
Host: 192.168.1.6 ()    
21  open    tcp     ftp     Microsoft ftpd  
25  open    tcp     smtp        Microsoft ESMTP 6.0.2600.2180   
80  open    tcp     http        Microsoft IIS httpd 5.1 
135 open    tcp     msrpc       Microsoft Windows RPC   
139 open    tcp     netbios-ssn     Microsoft Windows netbios-ssn   

我设法使用以下命令将第一个IP地址附加到每行的开头:

awk 'NR==1{IP="IP" FS $2 FS}NR!=1{$0=IP $0;print}' IPadd.txt > new.txt

有什么方法可以修改此功能,以便在每一行的开头都可以使用不同的IP并生成如下文件:

我希望新的文本文件读取:

192.168.1.4 21  open    tcp     ftp     vsftpd 2.3.4    
192.168.1.4 23  open    tcp     telnet      Linux telnetd   
192.168.1.4 25  open    tcp     smtp        Postfix smtpd   
192.168.1.4 53  open    tcp     domain      ISC BIND 9.4.2
192.168.1.6 21  open    tcp     ftp     Microsoft ftpd  
192.168.1.6 25  open    tcp     smtp        Microsoft ESMTP 6.0.2600.2180   
192.168.1.6 80  open    tcp     http        Microsoft IIS httpd 5.1 
192.168.1.6 135 open    tcp     msrpc       Microsoft Windows RPC   
192.168.1.6 139 open    tcp     netbios-ssn     Microsoft Windows netbios-ssn   

2 个答案:

答案 0 :(得分:3)

请您尝试以下。

awk '/^Host:/{ip=$2;next} NF{print ip,$0}'  Input_file

输出如下。

192.168.1.4 21  open    tcp     ftp     vsftpd 2.3.4    
192.168.1.4 23  open    tcp     telnet      Linux telnetd   
192.168.1.4 25  open    tcp     smtp        Postfix smtpd   
192.168.1.4 53  open    tcp     domain      ISC BIND 9.4.2
192.168.1.6 21  open    tcp     ftp     Microsoft ftpd  
192.168.1.6 25  open    tcp     smtp        Microsoft ESMTP 6.0.2600.2180   
192.168.1.6 80  open    tcp     http        Microsoft IIS httpd 5.1 
192.168.1.6 135 open    tcp     msrpc       Microsoft Windows RPC   
192.168.1.6 139 open    tcp     netbios-ssn     Microsoft Windows netbios-ssn

答案 1 :(得分:2)

这可能对您有用(GNU sed):

sed '/^Host/h;//d;G;s/\(.*\)\nHost: \(.*\) ()/\2 \1/' file

复制当前主机行并将其附加到非主机行中,以操纵主机行以仅显示IP地址。