Shell Script fragen.

Status
Für weitere Antworten geschlossen.

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
Hallo,

ich habe ein kleines oder großes problem :D
ich habe nun z.b. folgende Eingabe die ich bekomme:

Rich (BBCode):
Promille & Contra/HalliGallileo/ Rangeln/Oliver (Stark Motivationstrainer/Pocahontas wie kommt das?.enf,

das .enf ist nicht weiter wichtig das ist für mich in einem anderen Script.
mir geht es eig. darum das wie oben "/" oder "(" oder "?" usw. in dem namen enthalten sind kann ich sie mit sed nicht richtig bearbeiten weil er es als ein "Argument" sieht....
ich versuchen nun mit:
Rich (BBCode):
sed 's/\//;/g'

die ganze Geschichte zu umgehen nur ist das eben nicht sehr zuverlässig weil immer ein neues Zeichen auftaucht weswegen sed Meckert ......und im Nachhinein wenn ich die Ausgabe in eine datei mache muss ich wieder:
Rich (BBCode):
sed 's/;/\//g'

anwenden was sehr aufwendig ist und nicht sehr zuverlässig ist da ich auch unter umständen diese Symbole in meiner Eingabe habe: ;

nun die frage an euch Profis gibt es da eine Möglichkeit wie ich das gestallten kann das das zuverlässiger läuft ??

hier mal ein kleiner Auszug aus meinem script:

Rich (BBCode):
IFS=$'\n'
	for zeile in `cat "$debug_eingabe"`
	do
		timestampde=$(date "+%A %d %B %Y - %Hh:%Mmin:%Ssec")
		zeile=`echo "$zeile" | sed 's/\//:/g' | sed 's/(/;/g' | sed 's/)/__/g'`
		ueberpruefung_parameter=`echo "$zeile" | grep ".enf"`
		result200=$?
		if [ "$result200" -eq "0" ]
		then
			loeschen_name_enf=`echo "$zeile" |  sed -r 's/([^\.]*)\.enf.*/\1/g'`
			end_ausgabe=`echo "$zeile" | sed -r "s/$loeschen_name_enf.enf,//g" | sed 's/:/\//g' | sed 's/;/(/g' | sed 's/__/)/g'

und die zeile in der for schleife kann eben alles mögliche an Umlauten und Symbolen haben....
ich weis nicht was ich da machen soll.....

ich hoffe ihr könnt mir helfen.

lg
davin
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
du kannst die sonderzeichen mit einem \ davor für sed kennzeichnen:
Rich (BBCode):
echo "Promille & Contra/HalliGallileo/ Rangeln/Oliver (Stark Motivationstrainer/Pocahontas wie kommt das?.enf," | sed 's/\(&\|(\|\/\|?\)\{1\}/_/g'
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
hallo ;)

vielen dank für deine schnelle Antwort.
ich werde das gleich mal testen und melde mich wieder.

EDIT:

okey nun ersetzt er mir alle Symbole die aufgeführt sind gegen "_" das ist ja das selbe wie ich hatte nur in Kurz form ich hätte halt gerne nach der Bearbeitung von Sed diese "symbole" wieder.

srichch Vl. zum besseren Verständnis:

Eingabe:
Rich (BBCode):
Promille & Contra/HalliGallileo/ Rangeln/Oliver (Stark Motivationstrainer/Pocahontas wie kommt das?.enf,

Für Sed:
Rich (BBCode):
Promille _ Contra_HalliGallileo_ Rangeln_Oliver _Stark Motivationstrainer_Pocahontas wie kommt das_.enf,

nach Sed Ausgabe:
Rich (BBCode):
Promille & Contra/HalliGallileo/ Rangeln/Oliver (Stark Motivationstrainer/Pocahontas wie kommt das?

nur als Beispiel das man es Vl. besser versteht was ich vor habe ;)
 
Zuletzt bearbeitet:

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
Ich seh nur nicht was dein Script eigentlich tun soll...

Rich (BBCode):
Promille & Contra/HalliGallileo/ Rangeln/Oliver (Stark Motivationstrainer/Pocahontas wie kommt das?.enf,
steht in der Zeile

wie soll den $end_ausgabe am schluss aussehen?
einfach alles was vor dem .enf steht?
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
nein ;)

also in meiner zeile steht das:

Rich (BBCode):
zeile="Circus HalliGalli - s01e09 - Promille & Contra/HalliGallileo: (Rangeln)/Oliver Stark Motivationstrainer/Pocahontas wie kommt das?.enf,circushalligallis01e09,Circus HalliGalli,circus halligalli,season1,Season 1,9,1,Promille & Contra/HalliGallileo: (Rangeln)/Oliver Stark Motivationstrainer/Pocahontas wie kommt das?,,,,,29:Apr:2013,Unarchived,tt2717740,267172"

das heißt meine $end_ausgabe siehe dann so aus das alles hinter dem .enf dargestellt wird.
das heißt das hier nur noch:

Rich (BBCode):
circushalligallis01e09,Circus HalliGalli,circus halligalli,season1,Season 1,9,1,Promille & Contra/HalliGallileo: (Rangeln)/Oliver Stark Motivationstrainer/Pocahontas wie kommt das?,,,,,29:Apr:2013,Unarchived,tt2717740,267172

aber mir geht es erst mal darum wie ich das mit den Sonderzeichen mache denn das vor .enf steht dann am ende mit Hilfe von sed etc. auch alles hinter .enf und ich hätte gerne die ? () / usw. dann wieder in meiner $end_ausgabe datei.
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
achso, jetzt ists klarer.

Dein Script hat noch Potential zur Verbesserung :p
Die if Abfrage kannst du dir eigentlich auch sparen, ebenfalls das ersetzen der Sonderzeichen.


Rich (BBCode):
end_ausgabe=`echo "$zeile" | sed 's/^.*\.enf,//g'`
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
naaaaaatoll :D

und ich mache da nun schon seid stunden rum ^^
ich danke dir vielmals :D

lg
Kalysto
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
musst deine CPU ja nicht unnötig belasten, sonst hast du doch nur höhere Stromkosten ;)

gruess
benoga
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
haha :D da hast du recht :D

nur mal für mein Verständnis:

Rich (BBCode):
^.*
der Schnipsel sagt also alles was vor .enf steht nehmen und ersetzten durch nichts ??

ich glaube ich werde mal mein ganzes script überarbeiten wenn das nun so einfach war und ich da ka was alles gemacht habe :D
ich glaube du wirst nochmal von mir Hören :D
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
genau alles von Anfang der Zeile bis zum enf durch "nix" ersetzen

^=Anfang der Zeile
.=beliebiges Zeichen
*=egal wie viele Zeichen

ja, regex ist verdammt mächtig. Google mal nach sed regex, da gibts Tutorials, ist sehr interessant.

das gleiche könntest du auch mit echo $zeile | awk -F'.enf,' '{print $2}' machen, dann schneider er ebenfalls alles nach .enf ab, der Befehl benötigt aber 1ms länger :cool:
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
ich danke dir :D
ich merke schon du machst damit schon länger rum als ich :D
mit den Regex ist das so ne sache bei mir :D

aber ich schaue mal mein script durch was ich da alles verbessern kann ;)

ich danke dir! :D
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
ich hätte noch eine grundlegende frage.

wenn ich mit Grep in einer datei suche die ä ö ü Umlaute enthält wie mache ich das am besten:

Rich (BBCode):
grep="$liste - $season_episode"
	    zeile=`grep "$grep" "$debug_pruefung"`

das heißt $grep könnte so aussehen:

Rich (BBCode):
Bones - Die Knochenjägerin - s07e10

und $debug_prufung so: (ist eine datei mit ca. 5000 einträgen.)

Rich (BBCode):
Bones - Die Knochenjägerin - s07e10 - Große Krieger und der kleine Tote.davin,1952 MB,:volumeUSB2:usbshare:Serien HD:Bones - Die Knochenjägerin,12:04:2015,mkv,5:Mar:2013,Archived,tt0460627,75682

und wenn ich das nun so mache findet er es nie weil er sich an den Umlauten stört ....
gibt es dort auch eine Lösung oder muss ich dort nun die Umlaute mit sed abändern für grep ??

danke schon mal ;)
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
Umlaute sind für grep kein Problem.

Rich (BBCode):
echo "Bones - Die Knochenjägerin - s07e10 - Große Krieger blablabla" | grep ä
findet die Zeile...

Was aber stimmen muss, ist die gross/klein schreibung, sonst findet er es nicht.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
ja das mit groß klein ist klar ;)

bei mir findet er es nur mit dem sed Zusatz:

Rich (BBCode):
grep=`echo "$liste - $season_episode" | sed 's/ä/ä/g'`
zeile=`grep "$grep" "$debug_imdb_thetvdb_ids"`

wobei:
Rich (BBCode):
grep=Bones - Die Knochenjägerin - s01e01
und:
Rich (BBCode):
 debug_imdb_thetvdb_ids=Bones - Die Knochenjägerin - s01e01 - Die Frau im Teich.davin,1486 MB,:volumeUSB2:usbshare:Serien HD:Bones - Die Knochenjägerin,09:04:2015,mkv,19:Oct:2006,Archived,tt0460627,75682

und ohne den Zusatz oben von sed findet er es irgend wie nicht .....
ist das normal oder eher nicht so ^^?
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
debug_imdb_thetvdb_ids ist eine Zeile?

dann stimmt die grep Syntax nicht.
Rich (BBCode):
Usage: grep [OPTION]... PATTERN [FILE]...
grep verlangt am schluss ein File.

wenns die zeile ist, muss du diese am besten vorne dran aufrufen:
Rich (BBCode):
echo "debug_imdb_thetvdb_ids" | grep "$grep"
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
ja $debug_imdb_thetvdb_ids ist eine datei.
denn mit anderen namen klappt es ja schließlich auch ;) nur mit den Umlauten geht das irgend wie nicht ....
ach das ist doch schon wieder zum verrückt werden ^^
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
irgendwie hab ich das gefühl, du machst die grep abfrage wieder zu kompliziert und dann kommt nix raus^^
ist sicher wieder in einer for schleife, dass jede zeile einzeln ausliest?

probier mal das file mit cat aufzurufen und dann mit grep zu verarbeiten:
Rich (BBCode):
cat "/blabla/zu/file.txt" | grep "$grep"
bezw
Rich (BBCode):
zeile=`cat "/blabla/zu/file.txt" | grep "$grep"`
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
jetzt ne doofe frage .....

wieso klappt das mit dem:
Rich (BBCode):
zeile=`cat "$debug_imdb_thetvdb_ids" | grep "$grep"`

aber nicht damit:
Rich (BBCode):
zeile=`grep "$grep" "$debug_imdb_thetvdb_ids"`

ist doch im Endeffekt das selbe oder nicht ??

nein da ist keine If abfrage das kommt gleich nach der for schleife ;)
 

benoga

Gesperrt
Mitglied seit
20. Jan 2013
Beiträge
118
Punkte für Reaktionen
0
Punkte
0
Kommt aufs gleiche raus. Aber du wirst irgendwo einen Bock in der $grep haben und "cat | grep" ist gutmütiger ;)
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
haha na gut :D dann soll cat | grep froh sein das er es will ;)

ich danke dir nochmals ;)

EDIT:
ich hatte nicht gesehen das bei meine Variablen Grep noch
Rich (BBCode):
| sed 's/ä/ä/g'
gegeben war....

also wenn ich das weg mache geht es mit cat auch nicht ....
ich lasse und suche mir nun einfach die umlaute raus wie oben dargestellt und füge sie mit hinzu das ist ja nur ein mal und ist hoffe ich nicht so tragisch :D
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat