Awk - unkonfektioniert regex
Schreibe ich ein shell-script, welches herausziehen muss Werte aus einer text-Datei die wie folgt aussieht:
app.full.name /warfilelocation/ warfilename
Mein shell-Skript wird der Iteration über eine Liste von Anwendungen, die Namen und ziehen Sie entweder den Standort oder den Namen mit AWK. Habe ich ausprobiert, tut dies auf der Kommandozeile mit dem folgenden:
awk "\$1 ~/app.voll.name/{ print $2 }" applications.txt
dem zurück, was ich erwarten würde, jedoch wenn ich diese in ein shell-Skript starte ich Probleme.
Ich habe eine Funktion, die wie folgt aussieht:
function get_location() {
local application=$1
awk "\$1 ~/^$application/{ print \$2 }" applications.txt
}
Aber wenn ich diese Funktion aufrufen, bekomme ich die folgende Fehlermeldung:
awk: $1 ~/^app.full.name
awk: ^ unterminated regexp
awk: cmd. line:1: app.full.name
awk: cmd. line:1: ^ syntax error
awk: cmd. line:2: app.full.name/ { print $2 }
awk: cmd. line:2: ^ syntax error
Hat jemand eine Idee, was ich falsch mache hier. Ich nehme an ich bin nicht die Flucht der Variablen korrekt ist, aber egal was ich versuche, es nicht zu funktionieren scheint.
Vielen Dank im Voraus
- Wie rufst du die Funktion? Was ist der Wert der Anwendung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diesen Ansatz verwenden, um awk erkennen shell-Variablen:
Update
Beachten Sie, dass alles gehen könnte in der shell-variable,
sogar ein full-geblasen regexp, e.g
^d.*y
. Stellen Sie sicher, dass einfache Anführungszeichen verwendenum zu verhindern, dass die shell jegliche expansion.
-v
ermöglicht Ihnen die Verwendung einer shell-Variablen in awk-Skript. Dann, die variable kann verwendet werden, als eine regexp in einmatch()
- Funktion; aber das Teil habe ich ausgelassen...Die Fehlermeldungen scheinen darauf hinzuweisen, dass es eine streunende Zeilenumbruch am Ende von $Anwendung, die bietet die "Linie 2" - Fehlermeldungen.
sehen: mit awk match () - Funktion
Es ist schwer zu sagen, ohne genau zu wissen, den Wert von $Anwendung, aber es scheint, Sie haben ein seltsames Zeichen in $Anwendung, wie a " oder ein /oder so ähnlich.
Ich würde schauen, der genaue Wert, den Sie haben bei $Anwendung, und wenn es enthält ein /, Flucht er.
Eine Möglichkeit dazu wäre die Verwendung von: