2012-07-13 4 views
76

Ich schreibe Shell-Skript für Embedded Linux in einer kleinen Gewerbe Box. Ich habe eine Variable, die den Text pid: 1234 enthält, und ich möchte die ersten X-Zeichen aus der Zeile entfernen, so dass nur 1234 bleibt. Ich habe mehr Variablen Ich muss „sauber“, also muss ich X erste Zeichen wegzuschneiden und ${string:5} aus irgendeinem Grund nicht in meinem System nicht funktioniert.Wie kann ich mit sed erste X-Zeichen aus der Zeichenfolge entfernen?

Das einzige, was die Box sed zu haben scheint.

Ich versuche, die folgende Arbeit zu machen:

result=`echo "$pid" | sed 's/^.\{4\}//g'` 

Irgendwelche Ideen?

+6

Wenn '$ {string: 5}' nicht funktioniert, dann verwenden Sie keine Bash oder eine andere Shell, die diese Syntax unterstützt. Welche Shell und welche Version verwendest du? Wie sieht dein Shebang aus? Ich nehme an, dass Sie 'sh' (wie' dash') oder möglicherweise 'zsh' verwenden. –

Antwort

17

Dies wird auch die Arbeit machen:

echo "$pid"|awk '{print $2}' 
42

Verwenden Sie die -r Option ("Verwendung von regulären Ausdrücken im Skript erweitert"), um sed zu verwenden, um die {n} Syntax:

$ echo 'pid: 1234'| sed -r 's/^.{5}//' 
1234 
+1

Danke, es war eine schnelle Antwort! Es klappt! – Kokesh

+1

Wie wäre es für den Fall, wenn ich die letzten X Zeichen aus einer Zeichenkette entfernen möchte? – Kokesh

+5

@Kokesh: Sie können Sie 'sed -r 's/{5} $ //'' die letzten 5 Zeichen abzustreifen statt –

6

Wahrscheinlichkeiten sind, haben Sie auch cut. Wenn ja:

[[email protected]]$ echo "pid: 1234" | cut -d" " -f2 
1234 
+2

I CUT vor versucht haben, aber die Möglichkeiten sind begrenzt :) – Kokesh

+1

Ärger mit ' cut' ist, dass es Sequenzen von Whitespaces nicht sinnvoll handhabt, die Verwendung von 'tr -s '' um Räume zu" quetschen "macht es besser. – Thor

+1

Es ist nicht dazu gedacht, ein alles tanzendes Instrument zu singen; es ist einfach und funktioniert wie es auf der Dose steht und ist weit verbreitet. Es sollte für diese Anforderungen gut funktionieren und ist sicherlich robuster, wenn feste Zeichen von bestimmten Positionen abgeschnitten werden. –

125

Folgendes sollte funktionieren:

var="pid: 1234" 
var=${var:5} 

Sind Sie sicher, dass bash ist die Shell ausführen Skript?

+0

Arbeitete ein Vergnügen. –

+4

Dies sollte die akzeptierte Antwort sein! – ndmeiri

4

Rohr es durch awk '{print substr($0,42)}' wo 42 ist eine mehr als die Anzahl der Zeichen zu fallen. Zum Beispiel:

$ echo abcde| awk '{print substr($0,2)}' 
bcde 
$ 
45

Hier ist eine kurze Methode der ersten X Zeichen mit cut(1) zu schneiden. In diesem Beispiel werden die ersten 4 Zeichen entfernt.

echo "$pid" | cut -c 4- 
+1

Dies ist die einfachste Lösung! – Brandon

6

Cut ersten beiden Zeichen von string:

string="1234567890"; echo "${string:2}" 
+0

Dies funktioniert nicht. – luckytaxi

+0

@ dtp70 Vielen Dank eine generische Antwort, es hat super funktioniert! – wolfram77

1

Ein anderer Weg, mit cut statt sed.

+0

Er möchte die ersten 4 Zeichen entfernen. Dies erhält die ersten 4 Zeichen. –

+1

Der Code wurde geändert, um Schnitt statt Kopf zu verwenden. – Evgeny

Verwandte Themen