Mam plik, który składa się z adresu URL . Próbuję uzyskać adres URL z tego pliku za pomocą skryptu powłoki.
W pliku adres URL wygląda następująco:
('URL', 'http://url.com');
Próbowałem użyć następujących opcji:
cat file.php | grep 'URL' | awk '{ print $2 }'
Daje to wynik jako:
'http://url.com');
Ale muszę tylko wpisać url.com
zmienną w skrypcie powłoki. Jak mogę to osiągnąć?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
nie dałaurl.com
/
w sed, zwykle powinieneś użyć innego separatora, npsed s@http://@@g
.Możesz zrobić wszystko za pomocą prostego
grep
:Od
man grep
:Sztuką jest użycie,
\K
co w wyrażeniu regularnym Perla oznaczadiscard everything matched to the left of the \K
. Wyrażenie regularne szuka ciągów zaczynających się odhttp://
(które są następnie odrzucane z powodu\K
), po których następuje jak najwięcej'
znaków nie będących znakami. W połączeniu z-o
oznacza to, że wydrukowany zostanie tylko adres URL.Możesz to również zrobić bezpośrednio w Perlu:
źródło
Spróbuj tego,
źródło
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
do innego adresu URL, podobnie jak abc.com, jest dynamiczny i muszę pobrać ten adres URL za pomocą skryptu powłoki.Ponownie odwiedzając tę stronę i próbując użyć niczego poza powłoką Bash, kolejnym rozwiązaniem jednego wiersza jest:
Gdzie plik.in zawiera „brudną” listę adresów URL, a plik.out zawiera „czystą” listę adresów URL. Nie ma zewnętrznych zależności i nie ma potrzeby tworzenia nowych procesów lub podpowłok. Poniżej znajduje się oryginalne wyjaśnienie i bardziej elastyczny skrypt. Jest to podsumowanie dobre metody tutaj , zobacz przykład 10-10. Jest to podstawianie parametrów oparte na wzorcach w Bash.
Rozwijanie pomysłu:
Wynik:
Nie trzeba wywoływać żadnych programów zewnętrznych. Ponadto następujący skrypt bash
get_urls.sh
umożliwia odczyt pliku bezpośrednio lub ze standardowego wejścia:źródło
[t]csh
, więc jest dobre dla sh, bash, dash, ksh, zsh ...Jeśli wszystkie wiersze zawierają adres URL:
Jeśli tylko niektóre wiersze zawierają adres URL:
W zależności od innych linii może być konieczna zmiana
^define
wyrażenia regularnegoźródło
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Prosty:
a jeśli musisz usunąć „http: //”, to:
Więc:
Jeśli potrzebujesz określonej części adresu URL, musisz dopracować terminologię, adres URL zawiera wszystkie poniższe elementy, czasem więcej:
źródło
dla mnie pozostałe
grep
odpowiedzi otrzymały informację o ciągu zwrotnym po linku.Pomogło mi to wyciągnąć tylko
url
:źródło