513 Stimmen

Wie entferne ich die letzten n Zeichen aus einem String in Bash?

Ich habe eine Variable var in einem Bash-Skript, die einen String enthält:

echo $var
"some string.rtf"

Ich möchte die letzten vier Zeichen dieses Strings entfernen und das Ergebnis der neuen Variable var2 zuweisen, so dass

echo $var2
"some string"

Wie kann ich das machen?

43voto

Avinash Raj Punkte 165992

Sie könnten sed verwenden,

sed 's/.\{4\}$//' <<< "$var"

Beispiel:

$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string

17voto

Stepan Seliuk Punkte 129

Dies kann auch die Arbeit erledigen:

... | head -c -1

-c, --bytes=[-]NUM
              Gibt die ersten NUM Bytes jeder Datei aus; mit dem führenden '-', gibt alle Bytes jeder Datei außer den letzten NUM aus

11voto

Victor Pudeyev Punkte 3794

Die beste Antwort funktioniert für mich nicht, weil Mac OS X mit einer anderen Version von Bash ausgeliefert wird.

Ich benutze sed so:

var2=`echo $var2 | sed 's/.$//'`

entfernt das letzte Zeichen

var2=`echo $var2 | sed 's/..$//'`

entfernt die letzten 2 Zeichen.

8voto

Siddharth Murugan Punkte 101

Hoffe, das folgende Beispiel wird helfen,

echo ${name:0:$((${#name}-10))} --> ${name:start:len}

  • In obigem Befehl ist "name" die Variable.
  • start ist der Startpunkt des Zeichens.
  • len ist die Länge des zu entfernenden Zeichens.

Beispiel:

    read -p "Eingeben:" name
    echo ${name:0:$((${#name}-10))}

Ausgabe:

    Eingeben:Siddharth Murugan
    Siddhar

Hinweis: Bash 4.2 hat die Unterstützung für negative Unterzeichenfolgen hinzugefügt.

8voto

Gigi Punkte 337

In diesem Fall könnten Sie basename verwenden, vorausgesetzt, Sie haben denselben Suffix bei den Dateien, die Sie entfernen möchten.

Beispiel:

basename -s .rtf "some string.rtf"

Dies gibt "some string" zurück

Wenn Sie den Suffix nicht kennen und alles nach dem letzten Punkt einschließlich entfernen möchten:

f=file.whateverthisis
basename "${f%.*}"

gibt "file" aus

% bedeutet abschneiden, . ist das, was Sie abschneiden, * ist ein Platzhalter

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X