微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析字符串列表并根据行号枚举它们

如何解决解析字符串列表并根据行号枚举它们

有人可以帮我获取字符串列表并根据行号枚举字符串值吗?

我想弄清楚如何解析我所有已知的最喜欢的网络 SSID,然后根据输出的顺序为每个 SSID 分配一个编号。示例:

如果我运行 networksetup -listpreferredwirelessnetworks en0(在 macOS 上),我会根据我最近的 Wi-Fi 收藏夹列表(Apple 称之为“首选网络”列表)得到以下输出

Preferred networks on en0:
Denny's
Hilton Hotel 2465
Hipster Cafe
My_Moms_Basement
Airport_bar
Marriot - Public-5G
OFFICE

我想解析上面的输出搜索/过滤我的公司 SSID(在本例中为“OFFICE”),然后获取其行号(在本例中,“OFFICE”列在第 8 行 - 如果您计算标题“en0 上的首选网络:”)。

最终我想确定 SSID“OFFICE”是否在列表的顶部,如果不是,那么我将使用 networksetup 命令将其移到顶部 - 但我只想在以下情况下采取行动SSID“OFFICE”尚未位于顶部。在这种情况下,Apple 将第一行视为“索引 0”(因此行/数组计数在技术上从 0、1、2、3 等开始)。

我尝试过 wc、排序和各种计数循环,但我似乎无法得到它给我想要的输出

谢谢!

解决方法

如果你想为文件的每一行分配一个索引,你可以使用一个数组(在 bash 中声明 -a)

假设你提到的行在一个名为“preferred_networks”的文件中,你可以写这个来创建数组(每行一个数组条目):

declare -a ssid
exec 5<./preferred_networks 
((i=0))
while read line<&5; do 
    ssid[i]=$line
    ((++i))
done

然后您可以使用以下循环读取您的数组(包含 $i 元素):

for j in `seq 0 $i` ; do
 echo ssid[$j]
done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。