hahaxd3
Anmeldungsdatum: 3. Dezember 2014
Beiträge: 28
|
Moin Allerseits,
das Problem Kind ist wieder da ☺
Also folgendes Problem: ich hab dateien die Reguläre ausdrücke erhalten zbs. richtig\ fieß\r.txt wenn ich was mit der datei machen möchte wird das \r immer als return anerkannt.
wie kann ich das richtig quoten damit das nicht als return erkannt wird ( "richtig\ fieß\r.txt" scheint auch niicht richtig zu gehen). Danke im vorraus Mfg hahaxd3
|
lionlizard
Anmeldungsdatum: 20. September 2012
Beiträge: 6244
Wohnort: Berlin
|
Ich würde jetzt tippen, dass du mit "richtig\ fieß\\r.txt" weiterkommst. Aber im zweifel lass das doch das System herausfinden. Einfach ls richti eingeben und mit
Tab ⇆ die Autovervollständigung aktivieren. Das hat mir bislang immer geholfen - obwohl ich allerdins nicht auf die Idee käme, ein "\r" in den Dateinamen einzubauen.
|
hahaxd3
(Themenstarter)
Anmeldungsdatum: 3. Dezember 2014
Beiträge: 28
|
Also das problem liegt in einen Script ich habe datein die ich einlese mit einer variable wenn ich die jetzt so quote echo ' komand "$file" weitere files ' dann wird aber nicht die variable gelesen .... problem für problem ....
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
hahaxd3 schrieb: Also das problem liegt in einen Script ich habe datein die ich einlese mit einer variable wenn ich die jetzt so quote echo ' komand "$file" weitere files ' dann wird aber nicht die variable gelesen .... problem für problem ....
Zeig mal bitte mehr von dem Skript. Wir wissen ja nicht, wie Du das verwendest. Aus obigem ist es jedenfalls für mich nicht klar.
|
hahaxd3
(Themenstarter)
Anmeldungsdatum: 3. Dezember 2014
Beiträge: 28
|
1
2
3
4
5
6
7
8
9
10
11
12 | #!/bin/sh
echo "#!/bin/sh"
for file in "$@"
do
filexXx=${file}xXx
echo "cat >"$filexXx" <<AAAIIIXXXIIIGGGOOO"
cat "$file" | sed 's/^/#/g'
echo 'AAAIIIXXXIIIGGGOOO'
echo 'tr -d \^# < "$filexXx" > "$file"'
echo rm "$filexXx"
echo 'echo Datei wurde wieder Hergestellt "$file"'
done
|
wieder mein Shar für arme ☺ also wenn ich denn die datei richtig\ fieß\r.txt einlesen will ändert sich das \r in ^M um = retürn und das ganze skript wird ducheinander gebracht
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Warum benutzt Du ausdrücklich sh ? Bei solchen tückischen Sachen wie echo und Arrays reagieren die dash und die bash durchaus unterschiedlich: track@lucid:~$ x=123$'\r'456
track@lucid:~$ echo $x
456
track@lucid:~$ y=${x}x
track@lucid:~$ echo $y
456x
track@lucid:~$ echo $y | hd
00000000 31 32 33 0d 34 35 36 78 0a |123.456x.|
track@lucid:~$ x=123$'\n'456
track@lucid:~$ y=${x}x
track@lucid:~$ echo $y | hd
00000000 31 32 33 20 34 35 36 78 0a |123 456x.|
track@lucid:~$ y=( 1 2 3 )
track@lucid:~$ echo ${y[1]}
2
track@lucid:~$ sh
$ x=123$'\n'456
$ y=${x}x
$ echo $y | hd
00000000 31 32 33 24 0a 34 35 36 78 0a |123$.456x.|
$ y=( 1 2 3 )
sh: Syntax error: "(" unexpected Wenn Du also auf dieser Ebene basteln willst, dann solltest Du zumindest die Shell eindeutig auswählen. LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
hahaxd3 schrieb: 1
2
3
4
5
6
7
8
9
10
11
12 | #!/bin/sh
echo "#!/bin/sh"
for file in "$@"
do
filexXx=${file}xXx
echo "cat >"$filexXx" <<AAAIIIXXXIIIGGGOOO"
cat "$file" | sed 's/^/#/g'
echo 'AAAIIIXXXIIIGGGOOO'
echo 'tr -d \^# < "$filexXx" > "$file"'
echo rm "$filexXx"
echo 'echo Datei wurde wieder Hergestellt "$file"'
done
|
wieder mein Shar für arme ☺ also wenn ich denn die datei richtig\ fieß\r.txt einlesen will ändert sich das \r in ^M um = retürn und das ganze skript wird ducheinander gebracht
Oh jeh, da sind einige Dinge schief.
Du quotest in Zeile 5 und 6 nicht richtig. Der cat in Zeile 7 ist überflüssig, genau so wie "/g". Der tr tut nicht das, was Du erwartest: Du fügst ja nur am Anfang der Zeile ein "#" ein, also musst Du es auch nur dort entfernen. Mir ist nicht ganz klar, warum Du eine Datei ${file}xXx nutzt: im Prinzip musst Du die Rückverwandlung doch dort machen, wo Du die Datei auspackst (also in Zeile 6). Das Einfügen des Doppelkreuzes am Anfang der Zeile bringt Dir für Dein Shellskript gar nichts, denn die Daten stehen ja in einem Here Document. Stattdessen könntest Du eher Probleme mit Binärdaten (also außerhalb des Bereichs von 7bit ASCII) bekommen. Um Dir das Leben leichter zu machen, empfehle ich Dir das Programm base64 .
Dein ursprüngliches Problem mit dem regulären Ausdruck erkenne ich hier jetzt nicht genau wieder. Wenn es Dir aber darum geht, die Dateinamen eindeutig wieder her zu stellen, dann kannst Du das so machen (kleines Testprogramm): | #!/bin/sh
for f; do
echo "Original: $f"
skript="file='$(echo -n "$f" | sed -e "s#'#'\\\\''#g")'"
echo "Skript: $skript"
eval "$skript"
echo "Kopie: $file"
done
|
|