2016-10-23 3 views
-1

У меня есть текст, как это показано ниже:Bash Regular Expression Matching

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

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

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

Ниже мой Баш код:

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

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

Я не использую bash синтаксис для regex правильно?

+2

'$ {var %% pattern}' не использует регулярные выражения. Как вы думаете, почему? – melpomene

+0

Я хочу удалить подстроку, так как еще можно использовать шаблон без регулярного выражения? – atefth

+0

Это шаблон glob: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html – melpomene

ответ

2

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

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

shopt -s extglob 

string='GPS Mapping13m 51s' 
name="${string%%+([0-9])m +([0-9])s}" 
echo "$name" 
+0

'Countermeasures52s' не работает ... Я пытался что-то вроде'? (+ ([0-9]) m)?() (+ ([0-9]) s) 'который исправляет« контрмеры », но оставляет все другие, такие как «Some Random Text11m», «Some Other Text4m» и т. д., что я пропал без вести? – atefth

+0

Это была опечатка .. '? (@ (+ ([0-9]) m + ([0-9]) s) | + ([0-9]) s)' это, кажется, работает нормально. – atefth