siv237 писал(а):Хочется всётаки найти универсальный способ, ведь для человека нет проблем понять, где в строке написан именно баланс, а где левая рекламно-мусорная инфа.
cat /var/www/msg|grep 000101|grep USSD|sed 's/^/;/g'|grep -o -P ".+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+([.,]\d+)?)"|sed 's/$/;/g'|tr "\n" "_"|sed 's/;_;/\n/g'|sed -r 's/(_|- USSD - )//g'|sed 's/,/./g'|awk -F ";" '{print $1";"$2";"$3}' | grep -P -v "(;$|^;)" | tail -n 10
Вроде ищет все как надо и минусовые и целые балансы и без ограничения на длинну, но вот когда попадается вот такая коза от провайдера
12.05.2012 10:00:13 - USSD - 000101: Balans:212,71r Khity vmesto gudkov-1mes.besplatno:*728*99#
12.05.2012 10:30:12 - USSD - 000101: Nastroika servisa do 19:00 ch, vremya Vladivostoka. Prinosim svoi izvineniya, MTS
12.05.2012 11:00:16 - USSD - 000101: Nastroika servisa do 19:00 ch, vremya Vladivostoka. Prinosim svoi izvineniya, MTS
12.05.2012 11:14:36 - USSD - 000101: Balans:212,71r Khity vmesto gudkov-1mes.besplatno:*728*99#
то 19 пишется как баланс