Ich habe eine Datei, die aus einer URL besteht . Ich versuche, die URL aus dieser Datei mithilfe eines Shell-Skripts abzurufen.
In der Datei lautet die URL wie folgt:
('URL', 'http://url.com');
Ich habe versucht, Folgendes zu verwenden:
cat file.php | grep 'URL' | awk '{ print $2 }'
Es gibt die Ausgabe als:
'http://url.com');
Aber ich muss nur url.com
in eine Variable innerhalb des Shell-Skripts gelangen. Wie kann ich das erreichen?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
nicht gaburl.com
/
in sed abgleichen möchten , sollten Sie normalerweise ein anderes Trennzeichen verwenden, zsed s@http://@@g
.Sie können alles mit einem einfachen machen
grep
:Von
man grep
:Der Trick besteht darin, zu verwenden,
\K
was in Perl-Regex bedeutetdiscard everything matched to the left of the \K
. Der reguläre Ausdruck sucht also nach Zeichenfolgen, die mit beginnenhttp://
(was dann aufgrund von verworfen wird\K
), gefolgt von so vielen Nicht-'
Zeichen wie möglich. In Kombination mit-o
bedeutet dies, dass nur die URL gedruckt wird.Sie können dies auch direkt in Perl tun:
quelle
Versuche dies,
quelle
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
zu einer anderen URL sowie abc.com seine Dynamik hat und ich diese URL mit einem Shell-Skript abrufen muss.Wenn Sie dies noch einmal wiederholen und versuchen, nur eine Bash-Shell zu verwenden, ist eine andere einzeilige Lösung:
Wobei file.in die 'schmutzige' URL-Liste enthält und file.out die 'saubere' URL-Liste enthält. Es gibt keine externen Abhängigkeiten und es müssen keine neuen Prozesse oder Subshells erzeugt werden. Die ursprüngliche Erklärung und ein flexibleres Skript folgen. Es gibt eine gute Zusammenfassung des Verfahrens hier , siehe Beispiel 10-10. Dies ist eine musterbasierte Parametersubstitution in Bash.
Erweiterung der Idee:
Ergebnis:
Es müssen keine externen Programme aufgerufen werden. Darüber hinaus können Sie mit dem folgenden Bash-Skript
get_urls.sh
eine Datei direkt oder von stdin aus lesen:quelle
[t]csh
, also ist es gut für sh, bash, dash, ksh, zsh ...Wenn alle Zeilen eine URL enthalten:
Wenn nur einige Zeilen eine URL enthalten:
Abhängig von den anderen Zeilen müssen Sie möglicherweise den
^define
regulären Ausdruck ändernquelle
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Einfach:
und wenn Sie das 'http: //' entfernen müssen, dann:
So:
Wenn Sie einen bestimmten müssen Teil der URL müssen Sie Ihre Terminologie verfeinern, ist eine URL alle der folgenden, manchmal mehr:
quelle
Für mich geben die anderen
grep
Antworten Informationen zur Zeichenfolge nach dem Link zurück.Dies funktionierte für mich, um nur das herauszuziehen
url
:quelle