Wpis z mikrobloga

#linux #informatyka #bash
Ktos mi wyjasni czemu

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' $SITE_CONTENT > $APACHELINK
Nie dziala mi a jak zrobie

grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' $SITE_CONTENT > $APACHELINK
To dziala?

Ogolnie skrypt ma wyciagac adresy IP z calego pobranego pliku html i wrzucac do www na apacha.
Kilka la temu mi tak dzialalo, ale teraz cos sie zmienilo chyba, i musialem zmienic grep, aby uzywal paremetru -o.

SITE_CONTENT to jest to co robi wget dla strony https://dan.me.uk/bgplookup?asn=32590
  • 9
Różnica między tymi dwoma poleceniami grep polega na tym, jak są obsługiwane dopasowania.

Pierwsze polecenie:

bash

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' $SITECONTENT > $APACHELINK

To polecenie używa opcji -E, która włącza wyrażenia regularne rozszerzone (extended regular expressions). W tym trybie nawiasy klamrowe {} są traktowane jako zwykłe znaki i nie potrzebują ucieczki. Jednakże, bez opcji -o, grep wyświetli całe linie, które zawierają dopasowanie, zamiast wyłącznie dopasowanych fragmentów.

Drugie polecenie:

bash

grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
@m4rio: Zly sie wyslowilem,
Bez polecenia -o, plik jest totalnie pusty. A wg mnie powinien byc wstanie wyciagnac cos z innego pliku, na ktorym operuje owym grepem.
Ponizej wklejam czesc tego pliku, na ktoryp grep -E nie dziala, ale dziala grep -oE

@m4rio: Rozumiem, ze parametr -o rrobi mi "exact match" zamiast typowego "contain", ale chodzi mi o to, ze grep -E po prostu nie mogl wygenerowac zadnego outputu na podstawie tego pliku, co pokazuje (#!$%@? od poprawnosci tego, co chcialem zobaczyc).
@Rudz1elec: działa na mojej maszynie

wget -O - 'dan.me.uk/bgplookup?asn=32590' 2>/dev/null \
| grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' \
| tail -n 4

208.64.201.0/24 AS32590
208.64.202.0/24 AS32590
208.64.203.0/24 AS32590
208.78.164.0/22 AS32590
@Rudz1elec: do luftu ten grep, powinien się zaczynać znakiem początku linii ^ i kończąc lookbehindem (?=\/\d). A zamiast [0-9]{1,3} wystarczy \d ¯⁠\..(⁠ツ⁠)../⁠¯

grep -P '^(\d{1,3}\.){3}\d{1,3}(?=\/\d)'