我的问题是关于文本处理的:
在列表中,我有以下格式的 IP 地址和计算机名称:
IP address: 192.168.1.25
Computer name: computer7office
IP address: 192.168.1.69
Computer name: computer22office
IP address: 192.168.1.44
Computer name: computer12personal
我需要的输出:
This computer ip address is xxx.xxx.x.xx and is under the name zzzzzzzzzz
如何使用命令行自动将列表中的 IP 和名称复制到输出文件?您能否解释一下您的命令,因为当我不得不复制/粘贴我不理解的东西时,这很遗憾。
答案1
在 中sed
,假设您的列表位于名为 的文件中file
,您可以使用:
sed -n '/ss: /N;s/\n//;s/IP address:/This computer ip address is/;s/Computer name:/ and is under the name/p' file
-n
在我们要求之前不要打印任何内容/ss: /
找到模式ss:
(与 匹配的线条IP address:
)N
也读下一行,这样我们就可以加入他们;
分隔命令,就像在 shell 中一样s/old/new/
old
用。。。来代替new
s/\n//
删除两行之间的换行符p
打印我们处理过的代码行
当你看到你想要的东西时,重复命令> newfile
在其末尾添加以将修改后的文件写入newfile
更具可读性:
sed -n '{
/ss: /N
s/\n//
s/IP address:/This computer ip address is/
s/Computer name:/ and is under the name/p
}' file | tee newfile
(有助于同时tee
写入和显示输出)newfile
答案2
可能有十几种方法可以做到这一点,使用各种文本处理实用程序(awk
,perl
)和/或流编辑器(sed
,ed
)
一种方法是将cut
列表放在冒号分隔符 ( -d:
) 处,仅保留第二个字段 ( -f2
),然后使用xargs
将行对 ( -l2
) 作为参数传递给printf
:
$ cut -d: -f2 list.txt | xargs -l2 printf 'This computer ip address is %s and is under the name %s\n'
This computer ip address is 192.168.1.25 and is under the name computer7office
This computer ip address is 192.168.1.69 and is under the name computer22office
This computer ip address is 192.168.1.44 and is under the name computer12personal