PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [bash] frage



espo
11-07-2005, 19:48
Hi ja wieder ich,
ich habe eine datei die so aussieht!



bla
bla
123456234
bla bla bla


nun brauche ich die Zeile mit 123456.. in einer variable damit ich damit spaeter weiter arbeiten kann kann mir jemand sagen wie ich das hinbekomme.

Und direkt noch eine frage
Ich habe in einer variable z.b
das hallo~M
nun moechte ich dort das ~M abschneiden. Das ich dannach nur noch das hallo in der Variable habe.

mfg eSpo

ninguno
12-07-2005, 08:01
zur ersten Frage: wenn das die einzige zeile ist die mit 123456.. anfängt dann kannst du's mit grep holen:

VAR1=`grep 12345 file.txt`

zu zweiten Frage:


VAR3='das hallo~M'
VAR2=`echo $VAR3|cut --delimiter=~ --fields=1`

espo
12-07-2005, 09:14
Ja das problem is ninguno das es net immer mit 1 anfaengt sondern jedesmal ne andere zahlenfolge aus 7 zahlen ist!

fuer das 2te erstmal danke.

mfg eSpo

ninguno
12-07-2005, 10:22
na dann vielleicht so:


VAR1=`grep -E "^[0-9]{7}" file.txt`

espo
12-07-2005, 10:58
nun tut sich hier noch ein problem auf :-/. Ich hab an manchen dingen eine ganz merkwuerdiges zeichen dran ich vermute mal das es ein newline zeichen ist . wie mach ich das nun weg?

mfg eSpo

ninguno
12-07-2005, 11:20
kannst du das ein bisschen genauer beschreiben. du hast in deiner datei zeilen wo hinten was dranhängt oder wie?

espo
12-07-2005, 11:43
ja richtig da steht zum beispiel

Name und dann is dahinter noch ein Zeichen das ich net kenne ist ein M mit unterstrich oder ein ^M (die zeichen dahinter sind von editor zu editor unterschiedlich :D)

mfg eSpo

ninguno
12-07-2005, 12:08
und wie werden diese Dateien erzeugt, werden die mittels ftp auf diesen rechner transferiert?

ninguno
12-07-2005, 13:29
mach doch mal nen hexdump von dem file, damit man sieht was das wirklich für ein zeichen ist:


od --format=x file.xy

espo
12-07-2005, 16:33
ninguno hab es im geschaeft nun geloest hab mir nen kleinen cut ersatz geschrieben in c++



#include <iostream>
#include <string>

int main (int argc, char** argv)
{
std::string s;
std::cin >> s;

std::string out;

for (unsigned int i = 0; i < s.size(); i++)
{
if (s[i] != 13)
{
out = out + s[i];
}
}

std::cout << out;

}


damit tut nun alles :D

mfg eSpo

michael.sprick
12-07-2005, 17:36
das ist vermutlich ein Windows Zeilenumbruc...

Linux nutzt \n (linefeed) als Zeilenumbruch,
Windows hingegen \r\n (carriage-return, linefeed).

Sowas bekommst Du auch mit recode bzw dos2unix weg...

ninguno
12-07-2005, 18:47
ja das war auch meine vermutung, deshalb hab ich gefragt ob der file mit ftp auf den rechner geholt wurde. dos2unix ist sicher geeignet, aber noch besser wär´s diese transformation gleich von ftp machen zu lassen, indem man den ascii modus anstatt des binary modus beim transfer wählt

espo
13-07-2005, 00:23
ja die Datei kommt von windows :D aus ner software herraus die Patientendaten exportiert! und daher kann ich den output der datei net beeinflussen aber naja so tuts ja nun :D

mfg eSpo

ninguno
13-07-2005, 07:11
ja aber du transferierst die datei doch dann auf nen linux rechner? :confused: und wenn du das mittels ftp machst dann kannst du die übersetzung gleich von ftp machen lassen.

Blackhawk
13-07-2005, 10:18
ansonstens: dos2ux