bash - 检索印记/已知值之前的单词
问题描述
我有一个包含以下文本的文本文件。我想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 的名称。例如,我想 grep Bourbonhouse 它会打印出带有空格的波旁酒,我想尝试在 Infra 之前将第一个工作拉为指标,但我看到的所有解决方案都只在指标之后拉。有人可以指出我正确的方向或给我一个示范。
解决方案
在每种情况下,使用 shell-native 正则表达式来检索之前的单词Infra
可能如下所示:
re='[[:space:]]([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
[[ $line =~ $re ]] && echo "${BASH_REMATCH[1]}"
done
您可以在https://ideone.com/TmVO5J看到您输入的内容正在运行
如果您的目标是仅捕获带有*
前面的名称,则可能如下所示:
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
这个版本可以在https://ideone.com/VcoYM5看到