Ich habe diese other question lesen, die einige wirklich gute Regex für den Job hat, aber soweit ich sehen kann nicht mit BASH-Befehle arbeiten, wie BASH-Befehle solche komplexe Rexegs nicht unterstützen.Suchen Sie nach gültigen Link (URL)
if echo "http://www.google.com/test/link.php" | grep -q '(https?|ftp|file)://[-A-Z0-9\+&@#/%?=~_|!:,.;]*[-A-Z0-9\+&@#/%=~_|]'; then
echo "Link valid"
else
echo "Link not valid"
fi
Aber das funktioniert nicht wie grep -q nicht funktioniert ...
bearbeiten, ok Ich habe erkannt, dass grep eine "erweiterte reguläre Ausdrücke" hatte (-E) Option das scheint zu funktionieren. Aber wenn jemand einen besseren/schnelleren Weg hat, würde ich immer noch gerne darüber reden.
Vielleicht möchten Sie Ihre Motivation für das Stellen dieser Frage untersuchen. Programmierer versuchen, statische Auswertungen von URL/URIs und E-Mail-Adressen durchzuführen, die sich als syntaktisch gültig erweisen, aber nichts über ihre Zugänglichkeit sagen. Zum Beispiel wird "http: // www.example.com/false # fragment" immer syntaktisch gültig sein und (vermutlich) immer einen 404-Fehler zurückgeben. – msw
Diese Funktion muss nicht wissen, ob die Links funktionieren oder nicht, nur dass es sich um einen Link handelt. – Mint
Was nutzt eine URL, die nie eine Ressource findet? Warum noch einmal nachschauen? – msw