Bash 是否有一个函数允许我在文本文件中的一组行的开头加上一个字符串?

Bash 是否有一个函数允许我在文本文件中的一组行的开头加上一个字符串?,bash,awk,sed,Bash,Awk,Sed,我试图将IP地址(在下面的屏幕截图中)预先添加到每行的开头,以获得它们的相对结果 当前文件格式: 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

我试图将IP地址(在下面的屏幕截图中)预先添加到每行的开头,以获得它们的相对结果

当前文件格式:

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   
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   
我已使用以下方法将第一个IP地址附加到每行的开头:

awk 'NR==1{IP="IP" FS $2 FS}NR!=1{$0=IP $0;print}' IPadd.txt > new.txt
是否有任何方法修改此函数,以便我可以在每行的开头使用不同的IP,并生成如下文件:

我希望新文本文件为:

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   
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   

你能试试下面的吗

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
这可能适用于您(GNU-sed):


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

您要查找的单词是“prepend”;“append”是指在其他东西的末尾添加一些东西。你是个天才:-)@jas,:)我相信是你,因为你也发布了很好的代码,伙计:)NF有什么意义?OP中没有空行example@oguzismail,我很确定OP编辑了那条空行,当我第一次在我的系统上运行它时,它只打印了一行IP(我的内存很好:),所以为了避免我这样做,后来他/她会删除它。@RavinderSingh13我在输入代码时出错,事实上,文本文件中没有我想要预加的空行。