Mit RegEx Spalte 38 (er)setzen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von cognitiv, 22.07.2009.

  1. #1 cognitiv, 22.07.2009
    cognitiv

    cognitiv Grünschnabel

    Dabei seit:
    22.07.2009
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo @ll,

    ich muss in Zeilen, die an Spalte 20 eine 2 haben, in Spalte 38 ein "X" einbringen.
    Die Zeilen zu finden, die das erste Kriterium erfüllen, ist ja kein Problem, aber an der zweiten Aktion breche ich mir 'nen Ast:
    sed "s/[[:print:]]\{37\}[.] */[[:print:]]\{37\}[.]X*/g"
    bringt mir die Zeilen unverändert wieder zurück.
    Was mache ich falsch?
    Geht das u.U. auch in einem Rutsch?

    :hilfe2: me plz!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 22.07.2009
    Zuletzt bearbeitet: 22.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    es waere nett wenn du Code Bloecke benutzen koenntest, dann tauchen im Code auch keine Smileys mehr auf. ;)

    Ich denke dass sed in diesem Fall das falsche tool ist. Mit sed geht's vielleicht auch, aber dann muss man sich unnoetig verrenken. ;)

    Hier mal ein kurzes Beispiel, wie du das z.B. mit awk loesen koenntest, wenn du die Ausgabe erst in einer zweiten Datei speicherst:
    Code:
    echo "1234567890" | awk -F "" '
    {
       if ($5 == 5) 
       {
          OFS="";
          $9=$9"X";
          print $0;
       }
       else print $0;
    }' # > file.tmp
    
    Die Option -F "" setzt den field seperator auf den leeren String, d.h. jede Spalte ist ein Feld. Dann wird getestet ob in Spalte 5 eine 5 steht, und wenn ja wird in Spalte 9 ein X angehangen und dann die ganze Zeile ausgegeben. Wenn der Test fehlschlaegt, wird direkt die ganze Zeile ausgegeben, ohne irgendetwas zu veraendern.

    Edit:
    Aber wenn es denn unbedingt sed sein muss:
    Code:
    echo "1234567890" | sed 's$\(.\{8\}\).$\1X$'
    
    Ersetzt Position 9 mit einem X.

    mfg,
    bytepool
     
  4. #3 cognitiv, 22.07.2009
    cognitiv

    cognitiv Grünschnabel

    Dabei seit:
    22.07.2009
    Beiträge:
    3
    Zustimmungen:
    0
    Vielen Dank für die schnelle Antwort,
    ich hatte zunächst ein Problem, weil mein Ausgangsstring nicht zwingend schon die Position 38 überhaupt enthält, musste als den String künstlich verlängern, dann klappte es auch mit dem sed:

    echo "ABCDEFGHIJKLMNOPQ/2A" | awk '{printf("%-40s\n",$1)}' | sed 's$\(.\{37\}\).$\1X$'

    Den ersten Vorschlag konnte ich bisher nicht erfolgreich testen, weil der awk mir Syntaxfehler vorwirft. Ich werde die Parameter mal in ein externes File schreiben und beim Aufruf von dort lesen.
     
Thema:

Mit RegEx Spalte 38 (er)setzen

Die Seite wird geladen...

Mit RegEx Spalte 38 (er)setzen - Ähnliche Themen

  1. sed mit basename verknüpfen - oder anders Dateipfade in Dateien mit regex ersetzen?

    sed mit basename verknüpfen - oder anders Dateipfade in Dateien mit regex ersetzen?: Hallo, mein Ziel ist es ein Script zu schreiben, das eine CSS-Datei entgegen nimmt und in dieser Datei Pfade ersetzt. Ich möchte bspw....
  2. RegEx Problem ... grep kein \. außer \.name

    RegEx Problem ... grep kein \. außer \.name: Hallo Leute, ich möchte gerne einen regulären ausdruck zum filtern bestimmter dateien außer 1 bestimmten. Konkret bedeutet das ich möchte alle...
  3. regexp für alle user einer bestimmten Maildomain

    regexp für alle user einer bestimmten Maildomain: Hallo, ich brauche den regulären Ausdruck, der mir erlaubt alle Mailadressen von firma.de zu filtern. Ich habe es schon mit folgenden...
  4. RegExp für "Wort|NN"

    RegExp für "Wort|NN": Hallo zusammen, ich habe eine Textdatei mit einigen tausend Zeilen, die in etwa so aussehen: ---------- Absenkung|NN -0.3434 Absenkungen...
  5. Einen String extrahieren per Regex Hilfe gesucht

    Einen String extrahieren per Regex Hilfe gesucht: Hallo Leute, ich habe folgenden String: <td><font color="Black"><a href="url.tld?ID=AEA6EA04"...