Astrid <
astri...@gmail.com>:
>
> Habe in einem Verzeichnis viele Dateien.
>
> Nun moechte ich alle Dateinamen auflisten, wo Zeile 2 nicht
> diesen String enthaelt:
>
> | _ _ _ ___ ___ _ __ __ |
>
Wie möchtest du den Fall, dass die Datei keine zweite Zeile hat,
gewertet wissen?
Was verstehst du unter «enthalten»? Enthält beispielsweise die
Datei mit dem Inhalt (Zitat aus
<
http://www.dasbergwerk.de/Niederer_Unfug/Struwelpeter.html>)
Konrad sprach zur Frau Mama:
"Ich geh fort und Du bleibst da.
Sei hübsch ordentlich und fromm,
ich bin nur kurz in Spielsalon.
Und vor allem hör mir zu,
laß den Video in Ruh.
Die Brutalos sind vom schärfsten,
das ist nix für Deine Nerven."
in der zweiten Zeile die Zeichenkette «bleib»?
> Kann man das irgendwie bashmaessig abfragen?
>
Kommt darauf an, was du unter «bashmaessig» verstehst. Ich
interpretiere das mal so: «Kann man eine ‹bash›‐Kommandozeile
schreiben, die die Namen aller Dateien in einem Verzeichnis, bei
denen in der zweiten Zeile die gegebene Zeichenkette nicht
gefunden werden kann, durch je einen Zeilenwechsel getrennt
ausgibt, wenn man sich dabei auf die in den «bash» eingebauten
Kommandos beschränken will?»
(
verzeichnis='Setz hier das passende ein!' &&
# (Nur, damit keine so lange Zeile hinzuschreiben ist,
# was im Usenet nicht so gerne gesehen wird:)
suchbegriff='| _ _ ' &&
suchbegriff="$suchbegriff"' _ ___ __' &&
suchbegriff="$suchbegriff"'_ _ __ __ |' &&
: "${verzeichnis:?}" &&
for dateiname in "${verzeichnis%/}/"* \
"${verzeichnis%/}/".[!.]* "${verzeichnis%/}/"..?*
do
if test -f "$dateiname" &&
{
IFS= read -r -- zeile &&
IFS= read -r -- zeile &&
case "$zeile" in
(*"$suchbegriff"*) ! :
;;
(*) :
;;
esac
} < "$dateiname"
then
printf '%s\n' "$dateiname"
fi
done
)
Diese Kommandozeile enthält nur Elemente, die in den «bash»
eingebaut sind («test» und «printf» gehören auch dazu).