Leere Zeilen mit echo und grep in einer Variablen

FatManStanding

Lt. Junior Grade
Registriert
Aug. 2021
Beiträge
483
Hallo,

vermutlich ein simples Problem, ich komme aber nicht auf die Lösung. Wenn ich die Ausgabe von 'echo' mit 'grep' kürzen möchte bleiben leere Zeilen zurück wenn das ganze in einer Variablen passiert. Folgende Ausgabe (hier werden die Icons für Ubuntu hinterlegt, jede Auflösung hat einen Unterordner; scalable sind Vektorgrafiken; die nicht-quadratischen Stammen meist aus Wine):

Code:
/home/ich/.local/share/icons/hicolor/128x128
/home/ich/.local/share/icons/hicolor/16x16
/home/ich/.local/share/icons/hicolor/20x20
/home/ich/.local/share/icons/hicolor/22x22
/home/ich/.local/share/icons/hicolor/24x24
/home/ich/.local/share/icons/hicolor/256x256
/home/ich/.local/share/icons/hicolor/32x32
/home/ich/.local/share/icons/hicolor/32x64
/home/ich/.local/share/icons/hicolor/40x40
/home/ich/.local/share/icons/hicolor/48x48
/home/ich/.local/share/icons/hicolor/64x64
/home/ich/.local/share/icons/hicolor/75x68
/home/ich/.local/share/icons/hicolor/96x96
/home/ich/.local/share/icons/hicolor/scalable

Es sollen nur Ordner übrig bleiben die eine Auflösung im Namen haben. Also

Code:
for k in /home/$USER/.local/share/icons/hicolor/*; do
  echo "$k" | grep [0-9]x
 done

"scalable" wird nicht angezeigt. Aber bei

Code:
for k in /home/$USER/.local/share/icons/hicolor/*; do
  var=$(echo "$k" | grep [0-9]x)
  echo "$var"
 done

wird eine leere Zeilen für "scalable" angezeigt. Wenn ich stattdessen "grep -v [a-z]$" verwende das gleiche, nur dann eine leere Zeilen für alle mit einer Auflösung im Namen.

Es geht mir hier nicht darum "wie man das anders machen kann" sondern warum es hier nicht geht? Ich hab sämtliche Varianten mit Quoting durchprobiert.
 
Den spaß kannst du auch ohne grep machen:
Bash:
#!/bin/bash

for folder in /home/ich/.local/share/icons/hicolor/*; do
    if [[ "$folder" =~ [0-9]+ ]]; then
        echo "Ordner mit Auflösung gefunden: $folder"
    fi
done
 
  • Gefällt mir
Reaktionen: Der Lord
Das Verhalten ist doch normal. Jede Zeile wird behandelt und erzeugt eine Ausgabe - im Zweifel eine leere, weil du sie vorher mit grep raussortiert hast. Aber das echo Statement erzeugt eine neue Zeile.
 
FatManStanding schrieb:
Aber bei

Code:
for k in /home/$USER/.local/share/icons/hicolor/*; do
var=$(echo "$k" | grep [0-9]x)
echo "$var"
done
wird eine leere Zeilen für "scalable" angezeigt. Wenn ich stattdessen "grep -v [a-z]$" verwende das gleiche, nur dann eine leere Zeilen für alle mit einer Auflösung im Namen.
Weil du in jeder Iteration ohne Bedingung ein echo ausführst, auch wenn $var leer ist.

Alexander2 schrieb:
head und tail sind zum abschneiden/kürzen
Aber nicht zum zum Filtern.
 
Zurück
Oben