Bash 检索符号/已知值之前的单词

Bash 检索符号/已知值之前的单词,bash,Bash,我有一个包含以下文本的文本文件。我想从每行中检索Infra前面的单词: awesomebitchesz2.0 Infra 6 54 Mbit/s 79 ▂▄▆_ WPA2 * Bourbonhouse Infra 6 130 Mbit/s 70 ▂▄▆_ WPA2 -- Infra 6 130 Mbit/s 3

我有一个包含以下文本的文本文件。我想从每行中检索
Infra
前面的单词:

        awesomebitchesz2.0  Infra  6     54 Mbit/s   79      ▂▄▆_  WPA2        
*       Bourbonhouse        Infra  6     130 Mbit/s  70      ▂▄▆_  WPA2        
        --                  Infra  6     130 Mbit/s  34      ▂▄__  WPA2 802.1X 
文件的基础保持不变,但名字一直在改变。我希望能够提取特定AP的名称。例如,我想格雷普波旁豪斯它将打印波旁豪斯现在白色的空间
我想尝试在Infra之前把第一个作品作为一个指标,但我看到的所有解决方案都是在指标之后。有人能给我指出正确的方向或给我示范一下吗

假设AP名称中没有空格,您可以这样使用
cut

$cat filename.txt | cut-c9-| cut-f1-d''
AwesomeBitchesz 2.0
波旁豪斯酒店
--

在每种情况下,使用shell原生正则表达式检索
Infra
之前的单词可能如下所示:

re='[[:space:]]([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
  [[ $line =~ $re ]] && echo "${BASH_REMATCH[1]}"
done
re='^[[:space:]]*[*][[:space:]]*([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
  [[ $line =~ $re ]] && { result="${BASH_REMATCH[1]}"; break; }
done

if [[ $result ]]; then
  echo "Found result: $result"
else
  echo "No result found"
fi
您可以在以下位置看到您的输入正在运行


如果您的目标是仅捕获前面带有
*
的名称,则可能如下所示:

re='[[:space:]]([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
  [[ $line =~ $re ]] && echo "${BASH_REMATCH[1]}"
done
re='^[[:space:]]*[*][[:space:]]*([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
  [[ $line =~ $re ]] && { result="${BASH_REMATCH[1]}"; break; }
done

if [[ $result ]]; then
  echo "Found result: $result"
else
  echo "No result found"
fi

这个版本可以在

上看到,我认为在这里使用
sed
正则表达式可能是最好的选择,因为它允许您提取特定的组。这就是我想到的:

sed-n的/[\*\]*\(.*\)Infra.*$/\1/p'

下面是正在运行的正则表达式:

$ echo | sed -n 's/[\*\ ]*\(.*\) Infra.*$/\1/p' <<EOF
        awesomebitchesz2.0  Infra  6     54 Mbit/s   79      ▂▄▆_  WPA2
*       Bourbonhouse        Infra  6     130 Mbit/s  70      ▂▄▆_  WPA2
        --                  Infra  6     130 Mbit/s  34      ▂▄__  WPA2 802.1X
EOF
awesomebitchesz2.0
Bourbonhouse
--

$echo|sed-n的/[\*\]*\(.*\)Infra.*$/\1/p'您是在寻找Python还是Bash脚本???到目前为止你都试了些什么?谢谢。但是我希望能够得到一个特定的AP名称我想先得到一个bash解决方案,但最后我想在python应用程序im构建中使用它如果你在构建python应用程序,为什么要使用bash呢?用Python本机执行所有逻辑要高效得多。因为im构建的应用程序使用bash脚本,并且与bashi集成,就像这种格式,但是如果我只想得到一个fingle单词呢。比如说如果我想买bourdon house或者买一个很棒的Bitchesz 2.0?有没有一种方法可以抓住这一个名字?当然,你可以随时打破循环<代码>中断
即可。也就是说,您希望您的脚本如何知道要捕获哪些单词?如果您不知道希望它遵循什么逻辑,我们无法告诉您如何实现该逻辑。因此,该应用程序的工作方式是有一个列表框,显示所有可用的AP,如果我单击其中一个,它将连接到它。这是它的简短版本。我再次不明白为什么在bash中实现这个程序的任何部分都是一个好主意,或者间接性会大大减少。因为我不仅仅使用网络管理器。我将在side mine中使用多个其他工具和应用程序。而且,对于其他应用程序,也没有一个python方法或类。