übergeben Sie grep in einer Variablen in der bash
Habe ich eine Datei namens email.txt wie diese ein :
Subject:My test
From:my email <myemail@gmail.com>
this is third test
Möchte ich nur die E-Mail-Adresse in dieser Datei mithilfe von bash-Skript.Also ich habe diese script in meinem bash-Skript "myscript" einfügen:
#!/bin/bash
file=$(myscript)
var1=$(awk 'NR==2' $file)
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'))
echo $var2
Aber ich konnte, um dieses Skript auszuführen.Wenn ich diesen Befehl manuell in der bash kann ich erhalten Sie die E-Mail-Adresse:
echo $var1 | grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'
Muss ich die E-Mail-Adresse zu speichern in einer variable, damit ich Sie in anderer Funktion.Kann mir jemand zeigen, wie dieses problem zu lösen?
Danke.
- Haben Sie versucht
echo $file
um sicherzustellenmyscript
wirklich gibt den Inhalt aus email.txt? - jup..das habe ich schon getan.Die $ - Datei haben, die genaue Zeile und Inhalte, die ich will, um grep und es können echo ohne problem
- Im Falle der
From:
Linie ist nicht auf der Linie 2:awk -F : '$1 == "From" {print $2; exit}' "$file"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das ist eine allzu komplizierte Weg zu gehen über die Dinge, aber wenn Sie nur wollen, um Ihr Skript zu arbeiten, versuchen Sie dies:
Ich bin mir nicht sicher, was
file=$(myscript)
gedacht war, aber auf der nächsten Zeile, die Sie möchten einen Dateinamen als argument, umawk
, so dass Sie sollten geben Sie einfachemail.txt
als einen string-Wert zufile
, nicht ausführen einen Befehl namensmyscript
.$var1
ist nicht ein Befehl (es ist nur eine Zeile aus der text-Datei), so müssen Sieecho
es zu gebengrep
etwas sinnvolles zu arbeiten. Die zusätzlichen Klammern umgrep
sind überflüssig.$var1
.Was geschieht, ist dieses:
Müssen Sie etwas tun, wie dieses:
oder sogar
Dort sind sehr hilfreich flags für die bash: -xv
Die Zeile mit
sollte
Auch meine version von grep nicht -o flag.
Und, soweit grep Muster "gierig" auch wenn der folgende code ausgeführt wird, wird der Ausgang nicht genau, was Sie wollen.
Verwenden
Bash parameter expansion
,Es ist ein roher Weise:
cat $Datei | grep @ | tr '<>', '\012\012' | grep @
Ist, extrahieren Sie die Linie[s] mit dem @ - Zeichen, drehen Sie die Spitzen Klammern in neue Zeilen, dann grep mal wieder für alles, was Links mit einem @ - Zeichen.
Verfeinern, wie notwendig...