Как правильно использовать захват группы регулярных выражений с командой grep? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть этот текст:

Paket telah dikirim melalui TIKI, no.resi 885000130000, Cek status pesanan di https://tiki.id/resi/

И я хочу получить grep только часть 885000130000, вот что я попробовал:

echo "$text" | grep -Eo 'Paket telah dikirim melalui TIKI, no\.resi (.*),'

Но результатвсегда

Paket telah dikirim melalui TIKI, no.resi 885000130000, 

Я просто хочу, чтобы grep показывал только номер 885000130000.Как мне это сделать?

Ответы [ 5 ]

0 голосов
/ 04 июня 2018
awk -F'[, ]' '{print $8}' file

output
885000130000
0 голосов
/ 02 июня 2018

Если это не все, что вам нужно:

$ awk '{print $7+0}' file
885000130000

, затем отредактируйте свой вопрос, чтобы уточнить ваши требования.Если вам нужно сопоставить остальную часть этой строки, то вместо этого вам может понадобиться любой из них:

$ awk '/Paket telah dikirim melalui TIKI, no\.resi/{print $7+0}' file
885000130000

$ awk 'sub(/Paket telah dikirim melalui TIKI, no\.resi/,""){print $0+0}' file
885000130000

Это зависит только от невысказанных деталей ваших требований.Любое из вышеперечисленного будет работать эффективно, надежно и переносимо с любым awk в любой оболочке на любой машине UNIX и будет тривиально изменить, если / когда ваши требования изменятся.

0 голосов
/ 02 июня 2018

Если ваша строка / Input_file такая же, как показано в примере, то следующее также может вам помочь.

awk '{sub(/.*no.resi /,"");sub(/,.*/,"")} 1' Input_file
0 голосов
/ 02 июня 2018

С sed вы печатаете только строки с параметром -n, за которым следует .../p.Это решение показывает только одно совпадение на строку.

echo "${text}" | sed -n 's/.*Paket telah dikirim melalui TIKI, no\.resi (.*),.*/\1/p'

В вашем текущем примере вам нужны только ВСЕ цифры:

echo "${text}" | grep -Eo "[0-9]*"

или (если у вас есть другие числа) используйте 2 grep's:

echo "${text}" | 
   grep -Eo 'Paket telah dikirim melalui TIKI, no\.resi [0-9]*,' | grep -Eo "[0-9]*"
0 голосов
/ 02 июня 2018

решено:

echo "$text" | grep -oP 'Paket telah dikirim melalui TIKI, no\.resi \K(\d+)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...