我有一个包含以下文本的文本文件。我想从每行中检索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,它将打印出现在带有空白的bourbonhose 我想尝试将Infra之前的第一项工作作为指标,但是我看到的所有解决方案都只能在指标之后进行。有人可以向我指出正确的方向还是给我示范。
答案 0 :(得分:0)
假设AP名称中没有空格,您可以像这样使用cut
:
$ cat filename.txt | cut -c9- | cut -f1 -d ' '
awesomebitchesz2.0
Bourbonhouse
--
答案 1 :(得分:0)
在每种情况下,使用shell原生正则表达式来检索System.Exception
之前的单词可能是这样的:
Infra
上看到带有输入的内容
如果您的目标是仅捕获前面带有re='[[:space:]]([^[:space:]]+)[[:space:]]+Infra'
while IFS= read -r line; do
[[ $line =~ $re ]] && echo "${BASH_REMATCH[1]}"
done
的名称,则可能类似于:
*
可以在https://ideone.com/VcoYM5上看到此版本
答案 2 :(得分:0)
我认为在这里使用sed
正则表达式可能是最好的选择,因为它允许您提取特定的组。这是我想出的:
sed -n 's/[\*\ ]*\(.*\) 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
--
作为奖励,这将处理AP名称中包含空格的情况:
$ 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
Space Wayzz Infra 6 130 Mbit/s 34 ▂▄__ WPA2 802.1X
EOF
awesomebitchesz2.0
Bourbonhouse
Space Wayzz