• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Eingabe Zeilenweise zerlegen(gelöst)

Also, habe iene Frage, und zwar , ich habe ein skript, das eine EIngabe von der tastatur liest.
Nur ich wollte mehrer Zeilen eingeben nur wenn ich ich rigendetwas eingebe und mit Enter drücke, sprongt er nicht in die nächste Zeile, sondern führt dann den Nächsten Befehl aus.
Ist es möglich in der Eingabe mehrer Zeilen einzugeben?
 

framp

Moderator
Teammitglied
Du könntest mit
Code:
cat > eingabeDatei
lesen und dann die Eingabe mit
Code:
eingabeVariable=$(cat eingabeDatei)
rm eingabeDatei
aus der Datei in die Variable einlesen.
 
Ok wdanke, weil ich muss die EIngabe, muss keine Datei sein, sonder nur eine eingabe in drei Zeilen zerlegen.
Die stdin liest und teilt die Einagbe zeilenweise in drei Teile auf.
 
Kannst Du mal bitte die Rechtschreibung beachten?
Ich hab' echt keinen Bock, immer dieses Gestammel zu lesen.
 
Hi,

es geht bedingt. Wenn du bei der Eingabe beim Zeilenende ein \ eingibst und dann enter.
Code:
$ read x
sldfksdfklj \
> sldfkjsdlfjksldkfj
$ echo $x
sldfksdfklj sldfkjsdlfjksldkfj

besser ist es read in einer Schleife laufen zu lassen, dann hast du eine bessere Kontrolle über die Zeilen.

Gruß
Georg
 
ok
ich habe s folgendrmaßen gemacht:
Code:
echo "Bitte eingeben"

while read zeile
do

.......

nur ich gebe eine zeile ein drücke enter und er macht das nächste
ich wollte halt noch untendrunter eine Zeile noch eingeben
 

framp

Moderator
Teammitglied
Wie iest es mit
Code:
read -d `echo -e "\e"` -a a -p "Bitte was eingeben (Ende mit ESC): "
echo "*********************"
for ((i=0; i<${#a[@]}; i++)); do
   echo "Zeile $i: " ${a[$i]}
   alleZeilen=$alleZeilen$'\n'${a[$i]}
done
echo $alleZeilen
?
 

framp

Moderator
Teammitglied
intergo schrieb:
ok
ich habe s folgendrmaßen gemacht:
Code:
echo "Bitte eingeben"

while read zeile
do

.......
nur ich gebe eine zeile ein drücke enter und er macht das nächste
ich wollte halt noch untendrunter eine Zeile noch eingeben

Das sieht doch schon gut aus. Jetzt noch ..... mit Fleisch füllen und dann bist Du fertig. Was meinst Du mit
nur ich gebe eine zeile ein drücke enter und er macht das nächste
ich wollte halt noch untendrunter eine Zeile noch eingeben
?
 
Danke ,imerhin .
Ich soll ja laut Aufgabenstellung etwas eingeben und die eiingabe wird ja geteilt, jetzt dachte ich mir wenn ich nehemn wir mal an:

ida steht geben sie bitte etwas ein:

dann gebe ich aaa22334 z.b. und
wenn untendrunter 1234ewe.

nur das klappt nicht ich kann nur eine Zeile Eingeben,denn wenn ich enter drücke seringt er zum nächsen Befehl?
 

framp

Moderator
Teammitglied
Du willst wohl erst alle Eingaben einlesen und dann bearbeiten. Warum? Du kann doch auch immer eine Zeile einlesen - dann bearbeiten - und dann mit der nächsten Zeile fortfahren.
Code:
while read zeile; do
#   bearbeite zeile
done
 
ich weiß ,hast du dir das bild angeschuat , was ich hochgeladen habe, da steht es drinne wie es sein soll?, eigentlich hast du recht.
:)
bzw. wie soll ich die zeile in drei teile teilen
 

framp

Moderator
Teammitglied
Ich schreibe das mal in Pseudocode - das ist eine textuelle Beschreibung dessen, was das Programm machen soll (Vergleiche mit dem Text der Aufgabe und beachte die Einrückungen!):

Code:
Für alle Eingabezeilen 
   zähle Zeile
   hat die Zeile mindestens einen Buchstaben
      dann hänge Zeile bei Datei1 an 
      fahre mit nächster zeile fort
   hat die Zeile mindestens eine Ziffer
      dann hänge Zeile bei Datei2 an
      fahre mit nächster Zeile fort
   zähle verworfene Zeile

Gib Ergebnis aus
 
Hi,

wenn du die Zeilen nächträglich bearbeiten willst/musst gucke dir mal die Manpages von awk und cut an. Mit google wirst du auch Beispiele finden. Die beiden Befehle sind sehr vielseitig und können Strings, Texte usw. nach vielen Kriterien zerlegen. Wie man das im Einzelfall am Besten macht hängt von deinen Zielen und Kreativität ab.
Beispiele:
Code:
neu=`echo $string | cut -b 1-10` # schreibt die ersten 10 Zeichen des Strings $string nach neu
neu=`echo $string | awk '{print $2}'` # schreibt das zweite Wort des Strings $string nach neu
Gruß
Georg
 
framp schrieb:
Ich schreibe das mal in Pseudocode - das ist eine textuelle Beschreibung dessen, was das Programm machen soll (Vergleiche mit dem Text der Aufgabe und beachte die Einrückungen!):

Code:
Für alle Eingabezeilen 
   zähle Zeile
   hat die Zeile mindestens einen Buchstaben
      dann hänge Zeile bei Datei1 an 
      fahre mit nächster zeile fort
   hat die Zeile mindestens eine Ziffer
      dann hänge Zeile bei Datei2 an
      fahre mit nächster Zeile fort
   zähle verworfene Zeile

Gib Ergebnis aus

Das habe ich mit den Zählen der Zeilen nur was ich nicht verstehe ist, wie soll das mit dem teilen der eingabezeiel gehen.Danke framp.
 
intergo schrieb:
Also, habe iene Frage, und zwar , ich habe ein skript, das eine EIngabe von der tastatur liest.
Nur ich wollte mehrer Zeilen eingeben nur wenn ich ich rigendetwas eingebe und mit Enter drücke, sprongt er nicht in die nächste Zeile, sondern führt dann den Nächsten Befehl aus.
Ist es möglich in der Eingabe mehrer Zeilen einzugeben?
Code:
#!/bin/bash

read a1
read a2
read a3

echo "$a1$a2$a3"
liest 3 Zeilen. ;)

sprong, sprong, sprong ...
 
Hi, hab es hinbekommen und zwar mussze ich die Auabe der Zeilen nach der Beendigung der whileschleife bzw.außerhalb der while - Schlefe setzen, damit ich mehrer Zeilen untereinandereintippen konnte siehe:

Code:
#! /bin/bash
#set -x
#Split

verworfen=0			#Zähler für verworfene Zeilen

echo "Geben Sie bitte etwas ein , mit STRG+D wird die EIngabe beendet"	        
          while read zeile	                 
                    do


      if [ `echo "$zeile" | grep  '[a-Z][a-Z]*' ` ] 
	then

	echo $zeile >>datei1.txt	
         b=`cat datei1.txt | wc -l`	
	    

                    elif  [ `echo $zeile | grep '^[0-9]*$'` ]
					      
                           then
	                   echo $zeile >>datei2.txt	
	                    a=`cat datei2.txt | wc -l` 
	     


                                   else
                                   echo "Wurde verworfen"	
    
   
                                  let verworfen=$verworfen+1	 

  
    fi

done
echo "**********************************************"	
							
echo "In Datei1 wurden $b Zeilen geschrieben"
cat datei1.txt


echo "++++++++++++++++++++++++++++++++++++++++"

echo "In Datei2 wurden $a Zeilen geschrieben"
cat datei2.txt

echo "++++++++++++++++++++++++++++++++++++++++"


echo "Es wurden $verworfen Zeilen verworfen"

echo "***********************************************"


Danke an alle
 
Oben