Frage

Ich schreibe eine Shell (bash) Skript und ich versuche, eine einfache Möglichkeit, um herauszufinden, eine einfache Aufgabe zu erfüllen.

Ich habe einige String in einer Variablen. Ich weiß nicht, ob dies relevant ist, aber es kann Leerzeichen, Zeilenumbrüche enthalten, denn eigentlich diese Zeichenfolge der Inhalt einer ganzen Textdatei ist.

Ich mag sonst das letzte Vorkommen eines bestimmten Teilkette mit etwas ersetzen. Vielleicht könnte ich einen regulären Ausdruck dafür verwenden, aber es gibt zwei Momente, die mich verwirren:

  • Ich brauche vom Ende anzupassen, nicht von Anfang an
  • der Teil, die mich für das zu scann ist festgelegt, nicht variabel ist.
War es hilfreich?

Lösung

  • für am Anfang Kürzen: ${var#pattern}
  • am Ende ${var%pattern} Kürzen
  • ${var/pattern/repl} für allgemeinen Ersatz

die Muster sind ‚Dateiname‘ Stil Expansion, und die letzten mit # oder % vorangestellt wird, nur am Anfang oder Ende (jeweils)

Übereinstimmen

es ist alles in der (lange) bash manpage. überprüfen Sie die "Parameter Expansion" Kapitel.

Andere Tipps

amn Ausdruck wie folgt

s/match string here$/new string/

sollte es tun - s ist für sustitute, / brechen Sie den Befehl, und der $ ist das Ende der Linienmarkierung. Sie können dies in vi versuchen, um zu sehen, ob es das tut, was Sie brauchen.

Ich würde die Manpages für awk nachzuschlagen oder Sed.

Javier Antwort ist Shell spezifisch und wird in allen Schalen nicht funktionieren.

Die sed Antworten, die MrTelly und epochwolf spielte auf unvollständig sind und wie folgt aussehen sollte:

MyString="stuff ttto be edittted"
NewString=`echo $MyString | sed -e 's/\(.*\)ttt\(.*\)/\1xxx\2/'`

Der Grund, dies funktioniert, ohne dass der $ verwenden, um das Ende zu markieren ist, dass die erste ‚*‘ gierig ist und wird versuchen, so viel wie möglich zu sammeln, während man den Rest des regulären Ausdrucks wahr zu sein.

Dieser sed Befehl sollte verwendet in jedem Shell-Kontext funktionieren.

Normalerweise, wenn ich mit Sed stecken benutze ich diese Seite,

http://sed.sourceforge.net/sed1line.txt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top