Ändern Sie den Inhalt von Variablen, die mit sed (oder so ähnlich)
Schrieb ich ein BASH-Datei, die Funktionen, die mehrere eingebettete Schleifen der form
for P in {'0.10','0.20', [...] '0.90','1.00'}; do
for Q in {'0.10','0.20', [...] ,'0.90','1.00'}; do
[...]
Ich diese Variablen verwenden, die beide als Parameter für eine Kommandozeilen-Anwendung, und erstellen Sie Dateinamen direkt in der BASH. Ich möchte Duplikate erstellen, sagen $P_REP=0_10
ersetzt den Punkt durch einen Unterstrich schreiben ohne eine explizite switch-Anweisung für jeden Fall, oder einige hartkodierte entspricht. Die (nicht elegante Art und Weise) fand ich, um darüber zu gehen ist es zu
- dump den Inhalt
P,Q
in eine temporäre Datei. - ersetzen Sie den Punkt durch einen Unterstrich verwenden
sed 's/./_/-i
. - Lesen Sie die Datei erneut und laden Sie Ihre Inhalte auf die neue variable.
Also, ich Frage mich, ob es möglich ist, führen Sie eine sed-like-Befehl direkt auf den Inhalt einer variable?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun pattern substitution direkt in der bash:
Aus der bash(1) man-Seite:
{parameter#word}
und${parameter%word}
wie gut, beide unter dem gleichen "Parameter Expansion" - Sektion auf der man-Seite. Bash kann eine Menge Coole Sachen, aber Mann oh Mann, Ihr Mann-Seite ist dichten.John Kugelman s Antwort ist gut für dein Beispiel, aber wenn Sie brauchen, um zu verarbeiten, den Inhalt einer Variablen mit der tatsächlichen sed-Programm (oder einen beliebigen anderen Befehl), können Sie es wie folgt:
For-Schleifen, die Sie nutzen könnten:
Für das genaue problem, das Sie mentionning, verwenden Sie John ' s Vorschlag oben.
Möchte ich jedoch erwähnen, in Fall, dass Sie jemals haben, etwas ähnliches zu tun, das nicht gelöst werden kann mit der bash pattern-substitution syntax, dass Sie nicht brauchen, um tatsächlich temporäre Dateien erstellen zu transformieren-Inhalte mit sed oder ähnliche Befehle. Erste, Sie können über die Pipeline eine variable direkt an eine Programm als Standardeingabe STDIN. Zweitens kann man die Ausgabe eines Befehls (oeither es ist STDOUT, STDERR oder beide) direkt in eine shell-variable.
Also in Ihrem Beispiel hätten Sie:
Beachten Sie auch, dass die array-syntax (das ist
{ '0.10', '0.20', ...}
) ist meist spezifisch für Bash und ein paar wenige Bash-Anhänger. Wenn es einfach ist, so zu tun, Sie könnten es vorziehen, mehr klassischen Ansatz zu for-Schleifen in shell, wie ich domonstrated oben. Dann ist dein code wird safetly führen in allen posix-konformen shells.