Я использую скрипт bash с AT-командой AT + COPS =? который возвращает следующую строку:
+COPS: (1,"Orange F","Orange","20801",2),(1,"Swisscom","Swisscom","22801",7),(1,"Swisscom","Swisscom","22801",2),(1,"Salt","Salt","22803",2),(1,"Sunrise","Sunrise","22802",2),(1,"Sunrise","Sunrise","22802",7),(1,"Sunrise","Sunrise","22802",0),(2,"Salt","Salt","22803",7),(1,"Free","Free","20815",2),(1,"F SFR","SFR","20810",7),(1,"F-Bouygues Telecom","BYTEL","20820",7),,(0-4),(0-2)
И я пытаюсь найти регулярное выражение, соответствующее каждому короткому буквенно-цифровому имени оператора. Так вот, это:
Orange Swisscom Swisscom Salt Sunrise Sunrise Sunrise Salt Free SFR BYTEL
Например, в группе
(1,"F-Bouygues Telecom","BYTEL","20820",7)
Это интересная часть "BYTEL". 'BYTEL' может быть также строчными буквами и числами.
Я пробовал несколько решений, но все они не совпадают на 100%. На данный момент я использую:
grep -oP '"([a-zA-z])\w+"'
Но он не будет работать в некоторых особых случаях и соответствует также длинным буквенно-цифровым именам операторов (имя между кавычками).
3 ответа
Попробуйте этот вариант Sed
sed 's/(/\n/g' file | sed -n 's/.,".*","\(.*\)",".*".*/\1/p'
Ваша тестовая строка находится в файле, вывод
Orange
Swisscom
Swisscom
Salt
Sunrise
Sunrise
Sunrise
Salt
Free
SFR
BYTEL
Это надоедливый формат для разбора. Я придумал
fugly command |
grep -o '([^()]*)' |
awk -F , 'NF==5 { x=$3; gsub(/\"/, "", x); print x }'
Что неудовлетворительно в некотором смысле, но достаточно легко понять, я надеюсь.
Демонстрация: https://ideone.com/jH0NKj
Вот упрощенная вариация чистого Awk с немного другими предположениями:
awk -F , -v RS='(' 'NF>=5 { x=$3; gsub(/\"/, "", x); print x}'
Демонстрация: https://ideone.com/UvEXXH
Используя комбинацию sed и awk
sed 's/(/\n/g' file | awk -F, '{print gensub(/\"/,"","g", $3)}'
Orange
Swisscom
Swisscom
Salt
Sunrise
Sunrise
Sunrise
Salt
Free
SFR
BYTEL
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.