【问题标题】:Parsing a list of strings and enumerate them based on line number解析字符串列表并根据行号枚举它们
【发布时间】:2021-05-03 13:41:24
【问题描述】:

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

我试图弄清楚如何解析所有我最喜欢的网络 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、sort 和各种计数循环,但我似乎无法得到我想要的输出。

谢谢!

【问题讨论】:

    标签: regex bash parsing filtering string-comparison


    【解决方案1】:

    如果要为文件的每一行分配索引,可以使用数组(在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多