2016-06-01 19 views
0

Ich habe eine Variable in einem Linux-Bash ".sh" Skriptlinux bash sed-Befehl mit variabler

$data="test_1" 

jetzt will ich eine neue Variable ($ name) erstellen, die nur den Teil von $ data enthält vor dem Unterstrich, so

$name="test" 

ich dachte, das mit sed

tun
name=$(echo "$dataset" | sed 's/_.*//'); 

aber das scheint nicht zu funktionieren. Was mache ich falsch?

+2

'$ data = "test_1"' ist falsch. Variablen werden ohne das Dollarzeichen gesetzt: 'data =" test_1 "'. – fedorqui

+0

Für mich funktioniert es, obwohl es am besten ist, "echo" $ {data %% _ *} "' zu sagen. – fedorqui

Antwort

5

Kein Aufruf eines externen Prozesses erforderlich (sed). Stattdessen können Sie Shell Parameter Substitution wie folgt verwenden:

$ data="test_1" 

$ echo "${data%%_*}" 
test 

${var%%Pattern} von $var Entfernen Sie den längsten Teil der Muster, die das hintere Ende übereinstimmt (von rechts) von $var.

${var%Pattern} für kürzeste Muster

Weitere Informationen über Parameter Substitution entfernen können here gefunden werden.

Sie können es speichern in einer Variablen wie folgt aus:

$ name="${data%%_*}" 

$ echo "$name" 
test 
+0

, aber dies speichert es nicht in einer neuen Variablen? – user1987607