Bash如何用字符串分隔符切割文本 仅匹配最后一次出现的分隔符
Bash匹配最后一次指定分隔符提取前缀内容方案
原命令问题说明
你之前使用的awk -F 'BSSID' '{print $1}' file命令逻辑是将每行的BSSID作为字段分隔符切割后取第一个字段,会匹配所有行中出现的BSSID字符,不符合「匹配完整分隔符最后一次出现位置、取位置前所有内容」的需求。
实现方案
方案1:awk两次遍历实现(性能更优,适合大文件)
awk -v sep=' BSSID STATION PWR Rate Lost Frames Notes Probes' 'NR==FNR{if($0==sep) line=FNR; next} FNR < line' yourfile yourfile
逻辑说明:
- 第一次遍历文件,记录完整匹配分隔符的最后一行行号
- 第二次遍历文件,只输出行号小于分隔符行号的所有内容
方案2:tac+sed组合实现(写法更简洁)
tac yourfile | sed '1,/ BSSID STATION PWR Rate Lost Frames Notes Probes/d' | tac
逻辑说明:
tac将文件内容按行倒序输出sed删除从倒序后第一行到匹配分隔符行之间的所有内容- 再次用
tac将剩余内容倒回原顺序,就是分隔符之前的所有内容
内容的提问来源于stack exchange,提问作者user17523864
相关产品推荐
相关产品推荐

