如何在现有Shell管道中提取隔行尾段并拼接为无空格字符串?
解决方案:基于现有管道实现需求
当然可以!咱们直接在你现有的命令管道后面追加几个轻量的文本处理工具,就能完美实现你的需求。下面是完整的命令和分步解释:
完整命令
cat received.cap | grep -E "0x00(2|3)0" | cut -d " " -f 2- | awk '{if(NR%2==0) {print $(NF-1), $NF}}' | tr -d ' '
分步拆解
咱们从你已有的管道开始,一步步看新增部分的作用:
- 原过滤管道:
cat received.cap | grep -E "0x00(2|3)0" | cut -d " " -f 2-
这部分你已经搞定了——从抓包文件里过滤出包含0x0020或0x0030的行,然后去掉每行的第一个字段,得到你给出的初始输出。 - 提取偶数行的最后两个字段:
awk '{if(NR%2==0) {print $(NF-1), $NF}}'NR%2==0:判断当前处理的是不是偶数行(因为你要的是每第二行的内容)$(NF-1):代表当前行的倒数第二个字段,$NF代表当前行的最后一个字段- 这一步会把所有符合条件的字段按顺序输出,用空格分隔
- 拼接成无空格字符串:
tr -d ' 'tr是字符替换工具,-d参数表示删除指定字符,这里删除所有空格,直接把所有字段拼接成连续的字符串。
验证效果
用你给出的测试输入,这个命令会输出你想要的无空格长字符串:
000000005155464251554a43516b4a440000000151304e4452455245524556460000000252555647526b5a475230634b
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

