Bash-Scripting - Datei zeilenweise einlesen

Lord Alien

Lt. Junior Grade
Registriert
Apr. 2007
Beiträge
258
Hallo Community,

wie der Titel schon sagt, will über mittels eines Shell-Scriptes eine Datei zeilenweise einlesen. Ich hab es mit folgendem Codeschnipsel bereits probiert:
Code:
for i in $(cat test.txt); do
 echo $i
done;
Doch leider gibt es mir die Datei wortweise aus und nicht wie von mir gewollt Zeilenweise.

Auch google habe ich bereits befragt, doch bin ich zu keinem Ergebnis gekommen :mad:

mfg
Alien
:alien_alt:
 
Eigentlich simpel wenn man die Charakteristik von dem Command weiß. ;)
Code:
while read line; do echo $line ;done < test.txt

Schuld dran sind die Leerzeilen, was mich damals auch bei Übergabe von output zu input sehr stört
 
Zuletzt bearbeitet:
Ok, vielen Dank funzt einwandfrei !!
 
Zuletzt bearbeitet: (Mein Fehler ;))
Mir ist grad nicht klar, worüber du eigentlich hinausgehen willst. Falls du aber nur letzte Zeile haben möchtest, reicht das nicht den obigen Befehl mit less -1 pipen?
 
Grundsätzlich wollte ich einfach mal eine Datei zeilenweise bearbeiten können.

Das mit dem less -1 kapier ich jetzt nicht ganz. Du hast schon recht, ich will grad die letzte Zeile haben, aber "less -1"?? Ich hab mir die Manpage zu less durchgelesen, bin aber nicht draus schlau geworden.
 
Sorry meinte tail -1, habe aber stattdessen less -1 getippt.
 
Zuletzt bearbeitet:
Das ergibt natürlich schon mehr Sinn ;)

Vielen Dank. Auch dass funktioniert jetzt einwandfrei!

/edit:Noch ne kleine Offtopic-Frage: Ich weiß es ist sehr sehr sehr schlechter Programmierstil, aber kann ich ein kleines goto unter Bash machen? Und wenn ja, wie deklarier ich die Sprungmarken.
 
Sowas muss gehen

Code:
function wiedesheisst () {
commands
}

wiedesheisst
 
Danke für deine Antwort.

Hab mich dann doch dazu durchgerungen, das ganze mit Schleifen zu lösen. Funktionen währen für mich in diesem Fall keine Option gewesen.
 
Für alle die vielleicht ein ähnliches Problem haben/hatten, hier noch eine alternative Lösung:
Code:
#!/bin/bash
URLFILE=test

for i in `cat $URLFILE`; do
echo $i;
done

mfg
Alien
:alien_alt:
 
Ich möchte unter UNIX eine Datei zeilenweise einlesen, anschließend von jeder Zeile das erste Zeichen entfernen und das Ergebnis wieder zurück in eine Datei (zwecks Weiterverarbeitung schreiben). Irgendewtas funzt aber nicht richtig. Mein Code sieht wie folgt aus:

PHP:
while read line 
	do 
	echo $line | sed '1,1d' >> ./tmp/2B_deleted
	done < ./tmp/path_positives

"2B_deleted" ist die Date mit den Resultaten.

Hilfe !?!
 
Zuletzt bearbeitet:
judgemarcy schrieb:
von jeder Zeile das erste Zeichen entferne
Brauchst nicht die Shell drumherum, um zeilenweise einzulesen. Das kann sed selbst.

sed s/^.// <infile >outfile


In deinem sed-Versuch adressierst du mit "1,1" Zeilen 1 bis 1 zum Löschen, nicht Zeichen 1 bis 1. Da $line sowieso immer nur eine Zeile enthält und du diese eine Zeile jeweils löschst, bleibt nichts übrig, was in der Ausgabedatei landen könnte. Gehen würde: echo $line | sed s/^.//

Deine while ... read -Konstruktion würde außerdem Leerzeichen vorn und hinten einfach wegwerfen, weil IFS nicht geleert wurde. Deine Version mit Shell drumherum würde etwa so funktionieren:
Code:
while IFS='' read -r line; do
  echo $line | sed s/^.// >>outfile
done < infile
Bash kann auch Substrings ... kannst also echo ${line:1} schreiben und sed weglassen um den Inhalt von $line ab dem 2. Zeichen (Zählung beginnt mit 0) auszugeben.
 
Zuletzt bearbeitet:
Hi Leute ich stehe vor einem ähnlichen Problem und komme noch nicht weiter, vlt. kann mir hier jmd weiterhelfen.

Folgende Ausgangslage ist gegeben:

ich habe ein Textfile mit folgenden Zeilen, es handelt sich dabei um Betreffzeilen aus der Mailquaränte

Code:
X-Spam-Prev-Subject: Best Shake you can take to keep your manhood up
X-Spam-Prev-Subject: =?GB2312?B?UkU6IFdhdGVyIGJhc2VkIHZhcm5pc2g=?=
X-Spam-Prev-Subject: =?GB2312?B?UmU6TWFudWZhY3R1cmVyIGxvb2sgZm9yIG1hY2hpbmUgZGVhbGVycw==?=
X-Spam-Prev-Subject: Kindly confirm the account to reciev your payment!
X-Spam-Prev-Subject: Klasse, das funktioniert – ob Sie mitmachen oder nicht. Es ist Ihre Entscheidung
X-Spam-Prev-Subject: New Activity From Your Creative Network (12/14/2017)
X-Spam-Prev-Subject: Send a personalized-letter from Santa to your Child for Christmas!
X-Spam-Prev-Subject: =?UTF-8?Q?=E2=99=A5_Ein_ganz_besonderes_Weihnachts-Geschenk!_Fr.50?=
X-Spam-Prev-Subject: =?utf-8?Q?Vuelve_Enisa?=
X-Spam-Prev-Subject: =?GB2312?B?UmU6bGVhZGluZyBtYW51ZmFjdHVyZXIgb2YgVmFsdmUgaW4gQ2hpbmE=?=
X-Spam-Prev-Subject: =?UTF-8?Q?A_Holiday_Gift_for_You?=

nun möchte ich jede dieser Zeilen in einen funktionierenden Befehlbei "MEINE_ZEILEN_AUS_TEXTDATEI" einfügen.

Code:
for x in `grep -l "MEINE_ZEILEN_AUS_TEXTDATEI" /path/prox*`; do rm -f $x; done


ich habe schon einiges durchprobiert komme aber nicht ganz zum Ziel. Hier mein Test mit dem Code von Oben:

Code:
while IFS='' read -r line; do
  echo for x in `grep -l "$line" /path/prox*`; do rm -f $x; done | sed s/^.// 
done < /tmp/subjectsreduced.txt

der folgende Befehl durchsucht mir wunderbar alle Files nach dem Suchbegriff und löscht diese Files:

Code:
for x in `grep -l "$line" /path/prox*`; do rm -f $x; done


Wo stehe ich auf dem Schlauch? Danke für sämtliche Hilfe.
 
Zurück
Oben