我是社区的新人,这是我的第一个问题,我希望我做得正确。
我的问题:我正在学习一些网络和分析,并且有一个很长的 MAC 地址列表,我想使用命令行将它们放在同一个句子中,但我不知道如何做。
例如:MAC 地址:
xx:xx:xx:xx:xx:xx:xx:xx
yy:yy:yy:yy:yy:yy:yy:yy
zz:zz:zz:zz:zz:zz:zz:zz
我需要的输出:
The mac address xx:xx:xx:xx:xx:xx:xx:xx is not found - but...
The mac address yy:yy:yy:yy:yy:yy:yy:yy is not found - but...
The mac address zz:zz:zz:zz:zz:zz:zz:zz is not found - but...
我怎样才能实现这个目标?
我希望您有时间帮助我并原谅我的无知,我还在学习,如果我不花点时间搜索的话,我不会问这个问题。我看到有人使用 sed、awk 和 perl,但我什么都不懂,因为整个 linux 世界对我来说都是新的。请为我提供一些命令说明,以便我下次学习如何自己操作。
答案1
假设您的列表位于一个名为的文件中file
,其中没有其他内容(看起来是这种情况),您可以使用:
sed 's/.*/The mac address & is not found - but.../' file
s/old/new
old
用。。。来代替new
.*
匹配每行任意数量的任意字符&
在这里打印先前匹配的内容
如果您看到了想要的输出,请重复该命令(按向上箭头查看和编辑上一个命令),并>
在末尾将重定向()添加到新文件,如下所示:
sed 's/.*/The mac address & is not found - but.../' file > newfile
答案2
第一个问题的答案:
sed 's/$/ is not found - but.../' FILENAME | sed 's/^/The mac address /'
这种用法sed
只是用第二个字符串替换第一个字符串。$
表示行尾。^
表示行首。
第二个问题的答案:
sed 'N;s/\n/ /' FILENAME | sed 's/IP address:/This computer ip address is/' | sed 's/Computer name:/and is under the name/'
首先sed
合并每两行。剩下的sed
用新表达式替换旧表达式以构建新行。