使用终端自动从多行文件中复制特定文本并将其粘贴到另一个文件中

使用终端自动从多行文件中复制特定文本并将其粘贴到另一个文件中

我的问题是关于文本处理的:

在列表中,我有以下格式的 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

可能有十几种方法可以做到这一点,使用各种文本处理实用程序(awkperl)和/或流编辑器(seded

一种方法是将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

相关内容