Anzeige:
Ergebnis 1 bis 3 von 3

Thema: BASH: Zeilenumbruch am String-Ende entfernen

  1. #1
    Mad-Onion
    Gast

    BASH: Zeilenumbruch am String-Ende entfernen

    Hallo liebe Forengemeinde!

    Ich habe ein Problem mit meinem Bash-Script. Eigentlich soll es eine Textdatein nach einer bestimmten Zeile durchsuchen.
    Die Zeile hat folgenden Aufbau:
    Code:
    Full name            = kennungXY
    Das ganze befindet sich ein einer Datei mit diesem Aufbau:
    Code:
    Paper size           = A4
    Number of pages      = 1
    Full name            = kennungXY
    
    [Image Information]
    Width                = 1240
    Height               = 1754

    Und das ist das Script, was das ganze auswerten soll:
    Code:
    #!/bin/bash
    
    for X in *.txt
    do
    
    Benutzername=$( echo -n $(grep -is 'Full name' $X) | awk 'BEGIN{ FS=" = " } { print $2}' ) #Wert hinter dem "=" einlesen
      
    mkdir $Benutzername
    done
    Das soll eine Schleife darstellen, die jede einzelne Datei per grep nach dem String "Full name" durchsucht, die gefundene Zeile per awk an der Stelle " = " splittet und die "rechte" Hälfte in eine Variable schreibt. Soweit so gut, per "echo $Benutzername" wird auch korrekt der Wert ausgegeben, beim Erstellen des Ordners passiert jedoch ein Fehler, bei der Anzeige des Dateinamens in Gnome ist hinter dem Text ein kleines Rechteckt, was auf ein nicht darstellbares Zeichen hindeutet.
    Ich befürchte, das liegt an dem newline am Ende der Zeile.

    Jetzt meine Frage: Wie bekomm ich den newline weg?


    Gruß
    Tobias

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.07.2003
    Beiträge
    87
    Hi Tobias,
    du könntest deinen Konstrukt einfacher schreiben:
    Code:
    mkdir $(awk -F '=' '/^Full name/{print $2}' *txt)
    Ich würde aber den awk-output mal durch hexdump jagen, um mir das letzte Zeichen anzuschauen - bei mir funktioniert das Script.

    Wenn dich wider Erwarten das letzte Zeichen stören sollte, lass Perl diese Aufgabe übernehmen. Dort gibt es chomp() für genau diese Anwendung.

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Du kannst das Ganze noch nach 'sed' oder 'tr' pipen, um das Newline-Zeichen zu entfernen:

    Code:
    Benutzername=$(... | tr -d "\n")
    oder:
    Benutzername=$(  ... | sed ':a;N;$!ba;s/\n//g')

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •