我是社区的新手,这是我的第一个问题,我希望我做对了。
我的问题:我正在学习一些网络和分析,并且有很长的 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
Run Code Online (Sandbox Code Playgroud)
我需要的输出:
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...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我希望你有时间帮助和原谅我的无知,我还在学习,如果我没有花一些时间搜索,我不会问。我看到人们使用 sed、awk 和 perl,但我不明白整个 linux 世界对我来说都是新的。请向我提供有关命令的一些解释,以便我下次学习如何自己做。
我的问题是关于文本处理:
在列表中,我有以下格式的 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
Run Code Online (Sandbox Code Playgroud)
我需要的输出:
This computer ip address is xxx.xxx.x.xx and is under the name zzzzzzzzzz
Run Code Online (Sandbox Code Playgroud)
如何使用命令行自动将列表中的 IP 和名称复制到输出文件?你能解释一下你的命令吗,因为当我不得不复制/粘贴我不理解的东西时很遗憾。
我有一个包含以下信息的文件:
用户名:sjohhny@email1.com 值一:xx:xx:xx:xx:xx:xx 值二:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 值三:Sjohhny@email1.com@[xx:xx] [三个值的混合] 用户名:Vsamba@email3.com 值一:mm:mm:mm:mm:mm:mm 数值二:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm 值三:Vsamba@email3.com@[xx:xx] [三个值的混合] 用户名:Skrids@email2.com 值一:yy:yy:yy:yy:yy:yy 值二:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy 值三:Skrids@email2.com@[xx:xx] [三个值的混合] 用户名:Vconan@email4.com 值一:zz:zz:zz:zz:zz:zz 值二:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz 值三:Vconan@email4.com@[xx:xx] [三个值的混合]
首先,我想过滤掉所有以 S 开头的用户名信息,保留那些以 V 开头的用户名。之后,我想制作一个可以运行的 .sh 脚本的最终产品。我想做的是:
所以,我的 .sh 文件将与此类似
echo 用户名:Vsamba@email3.com 你好 -一个 mm:mm:mm:mm:mm:mm -Two: mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm --谢谢 -访问 echo 用户名:Vconan@email4.com 你好一 zz:zz:zz:zz:zz:zz -二:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz --Thanks -for -参观
我在 Youtube 上观看了关于 Sed 的整个视频系列,并阅读了这里的许多文章,试图想出一个可以生成我想要的脚本的脚本,但都失败了。你能告诉我如何编写这样的脚本吗?如果您推荐新用户可以阅读的有关 sed(或 Awk 或 Perl)的网站/参考资料,我也很乐意
请注意,“:”的数量对于值一和值二来说是静态的,这可能会以某种方式使用。我尝试使用它,但每次当我只要求一个值时我得到了两个值,但是你比我更知道如何利用这个事实。
抱歉问了这么长的问题!在没有自动化过程的情况下完成所有这些需要花费太多时间,而且我完全在 linux 世界(和一般的计算机,就此而言!)
所以我使用的命令如下:
sort file1.txt | uniq > cleared.txt
Run Code Online (Sandbox Code Playgroud)
但是,cleared.txt 文件的大小完全相同,并且所有重复项仍然存在。您能否解释一下我尝试做的方式有什么问题,也许还提供替代方案?
谢谢!
更新:我尝试使用以下 awk 命令,但重复项仍然存在。
awk '!seen[$0]++'
Run Code Online (Sandbox Code Playgroud)
也许值得一提的是,我试图清理的文件是从可能源自不同国家/布局的不同文件中收集的。请注意,我想保留一份重复的单词。
我正在处理如下所示的程序输出:
Computer1@domain.com:randomtext1:completion of randomtext
Computer2@domain.com:randomtext4:completion of randomtext
Computer1@domain.com:randomtext3:completion of randomtext
Computer3@domain.com:randomtext2:completion of randomtext
Computer2@domain.com:randomtext5:completion of randomtext
Computer1@domain.com:randomtext6:completion of randomtext
Computer3@domain.com:randomtext7:completion of randomtext
Computer2@domain.com:randomtext8:completion of randomtext
Run Code Online (Sandbox Code Playgroud)
所以如你所见,同一台电脑会给我不止一个结果,但是每个结果在内容和长度上都是不同的(但都在一行中)。有些计算机只会给出 1 个结果,有些计算机会给出多达 15 个结果,具体取决于该计算机的活动。
我想要的是我只想看到每台计算机的一个结果而不是所有结果。我现在所做的是对它进行排序并手动删除副本,这不是很有帮助!我尝试使用诸如diff和comm 之类的命令,但没有运气(这是有道理的,因为行非常不同)。
那么,如何使用 via 终端将输出更改为与此类似:
Computer1@domain.com:randomtext1:completion of randomtext
Computer2@domain.com:randomtext4:completion of randomtext
Computer3@domain.com:randomtext2:completion of randomtext
Run Code Online (Sandbox Code Playgroud)
我脑子里的想法是,也许有一种方法可以告诉终端“比较 .com 之前或第一个之前的任何内容:并删除副本”