2017-12-01 6 views
1

Ich benutze ein MacOSX um ein bash Skript zu erstellen, das Skript überprüft andere Dateien und vergleicht die Inhalte miteinander, wodurch ein inkrementierender Zähler entsteht. Die Funktionen, die die Zähler verwenden, müssen zuerst ausgeführt werden, damit die Variablen die Informationen enthalten. Daher scheint es die beste Option, die Zeile durch das Kommando sed einzufügen. Gibt es eine Möglichkeit, es so zu machen, dass ich den wörtlichen Teil ignorieren kann, den die einfachen Anführungszeichen erzeugen? Dies ist auch BSD sed, nicht GNU sed. Oder wenn es eine andere Alternative als sed gibt, wäre ich daran interessiert zu wissen, wie es geht.BSD sed, Wie füge ich eine Zeichenkette mit Variablen ein

CODE:

sed -i '' '3i\ 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}' $LOGFILE 
sed -i '' '3i\ 
There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER}' $LOGFILE 

OUTPUT:

There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER} 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER} 

Antwort

1

Variablen nicht innerhalb '...' erweitert. Ändern Sie die einfachen Anführungszeichen in doppelte Anführungszeichen. Auf der anderen Seite, die \ in doppelten Anführungszeichen das Newline zu entkommen interpretiert werden, dass es folgt, aber in diesem Fall müssen Sie es eine wörtliche \ für den i Befehl von sed sein. Innerhalb doppelte Anführungszeichen müssen Sie das als \\ schreiben.

setzen sie zusammen, schreiben Sie wie folgt aus:

sed -i '' "3i\\ 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}" $LOGFILE 

Wie @EdMorton wies darauf hin, es wird robuster sein Apostrophe zu verwenden, und brechen aus ihm benötigt als zur doppelten Anführungszeichen nur die spezifische Teile, bei denen Variablen verwendet werden, wie folgt aus:

sed -i '' '3i\ 
There are a total of '"${ALOLANCOUNT}"' Pokemon in Alola, and you have '"${HAVECOUNTER}"', and need '"${ALOLANNEEDCOUNTER}" $LOGFILE 

Dieses robuster ist, weil auf diese Weise müssen Sie die gesamte Zeichenfolge nicht scannen, wenn es etwas gibt, werden entkommen könnte müssen, wie die 012.in meinem ersten Vorschlag.

Verwandte Themen