Нахождение последнего появления шаблона в строке

Antes de realizar cualquier cambio, intente eliminar los directorios /tmp/tmux -*Asegúrese de que no afecte a los usuarios actualmente conectados.

0
26.04.2018, 20:44
3 ответа

Мне нравится использовать awk в таких случаях:

$ awk '{print $NF}' FPAT="[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}" file1
78.41.207.101
194.126.22.146

FPATиспользуется для определения того, из чего состоит поле (идентично вашему grep -o шаблону)
$NF— последнее поле каждой строки

0
28.04.2021, 23:47

Вы можете попробовать этот sed

sed -E 's/.*[^0-9](([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/' infile

Объяснить:

-E для использования расширенного регулярного выражения.
Без -E вы должны написать команду так

sed 's/.*[^0-9]\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/' infile

(([0 -9]{1,3}. ){3}[0 -9]{1,3} )такое же RE, как и у вас.

<-------> !  
    1     3 time

'[0 -9]{1,3}.[0 -9]{1,3}.[0 -9]{1,3}.[0 -9] {1,3}'

< --------->< --------->< --------->

   1       2       3

Часть первая. *[^0 -9] — жадный.
Он соответствует всему, что может, перед последним регулярным выражением в строке.
Последний. *соответствует концу строки.

1
28.04.2021, 23:47

В большинстве механизмов регулярных выражений используются жадные шаблоны, т. е. они соответствуют максимальному количеству совпадений. Таким образом, что-то вроде ^.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+будет соответствовать вплоть до последнего IPv4-адреса включительно. Захватите это.

0
28.04.2021, 23:47

Теги

Похожие вопросы