2014-10-08 3 views
1

У меня есть файл с линиями, как следующее:Использование СЭД для извлечения данных из файла

{u'phone_num ': u'9999999999', u'name ': u'abc', u'format ': и 'json'}

Я пытаюсь извлечь номер телефона, т.е. 9999999999, из каждой строки.

The sed, котор я использую не работает.

echo "{u'phone_num': u'9999999999', u'name': u'abc', u'format': u'json'}" | sed 's/.*phone_num.*\([[:digit:]]\+).*/\1/' 

Это печать всей строки, а не только цифр.

+1

Почему бы не использовать вырезать? 'echo '{u'phone_num': u'9999999999 ', u'name': u'abc ', u'format': u'json '}" | cut -d "'" -f 4' –

ответ

1

Вы можете использовать это СЭД:

sed "s/^{u'phone_num':[[:blank:]]*u'\([^']*\).*$/\1/" file 
9999999999 
+0

Не могли бы вы объяснить? Также, пожалуйста, дайте мне знать, почему регулярное выражение, которое я использую, не работает. – Anuj

+0

Это регулярное выражение соответствует 'u'phone_num ': u'' в начале и фиксирует следующую строку в обратной ссылке 1. Затем в замене используется' \ 1' для вывода '9999999999'. – anubhava

+0

Кроме того, что, если мне нужно извлечь имя и номер телефона? – Anuj

1

Еще одно решение с использованием awk

echo "{u'phone_num': u'9999999999', u'name': u'abc', u'format': u'json'}" | awk -F "'" '{ print $4 }'

Смежные вопросы