Соответствие регулярных выражений Bash

У меня есть такой текст ниже:

Insights into Wireless
53m 16s
Insights into Wireless8m 34s
New Terms to Learn11m 19s
Advantages & Disadvantages5m 50s
Types of Wi-Fi Networks2m 39s
Wi-Fi Standards7m 24s
Wi-Fi Authentication Modes3m 11s
Chalking4m 38s
Antenna Types7m 22s
Summary2m 17s
Encryption in Wireless
23m 50s
Encryption in Wireless1m 47s
WEP Encryption3m 52s
WPA & WPA2 Encryption7m 40s
Breaking Encryption6m 7s
Defending Against Cracking2m 23s
Summary1m 58s
Threats from Wireless
18m 23s
Threats from Wireless1m 38s
Types of Attacks7m 28s
Attack on the AP5m 29s
Attack on the Client2m 43s
Summary1m 3s
The Methodology of Hacking Wireless
45m 20s
The Method of Hacking Wireless1m 8s
Wi-Fi Discovery4m 47s
GPS Mapping13m 51s
Wireless Traffic Analysis6m 9s
Launching Attacks4m 59s
Let's Go Look-ng3m 52s
Cracking Wi-Fi Encryption2m 7s
Let's See How Much Damage We Can Do!6m 59s
Summary1m 24s
Hacking Bluetooth
17m 23s
Hacking Bluetooth1m 0s
The Threats1m 40s
New Terms3m 26s
All About Bluetooth4m 14s
Security5m 43s
Summary1m 18s
Countermeasures
18m 51s
Countermeasures52s
Bluetooth1m 45s
Rogue APs2m 6s
6 Layers of Wireless3m 22s
Best Practices6m 55s
Tools2m 1s
Summary1m 47s

Я хочу удалить длительность с конца каждой строки (если она есть) и сохранить заголовок, как описано ниже -

Insights into Wireless8m 34s

должно быть преобразовано в:

Insights into Wireless

Я использовал этот инструмент онлайн и обнаружил, что ([0-9]{1,2})m\s([0-9]{1,2})s дает желаемый результат.

Однако использование этого регулярного выражения в моем скрипте bash не дает результатов!

Ниже мой код Bash:

name="${string%%'([0-9]{1,2})m\s([0-9]{1,2})s'}"

$ string содержит каждую строку из данного примера текста в самом верху.

Я правильно не использую синтаксис bash для регулярных выражений?

1 ответ

Решение

Часть после %% это не регулярное выражение, а шаблон глобуса (то, что вы используете для имен файлов, например *.jpg).

Вы можете сделать это с помощью расширенных шаблонов глобуса bash. Чтобы включить их, вы должны поставить shopt -s extglob в начале вашего сценария. Вот пример:

shopt -s extglob

string='GPS Mapping13m 51s'
name="${string%%+([0-9])m +([0-9])s}"
echo "$name"
Другие вопросы по тегам