Anzeige:
Ergebnis 1 bis 12 von 12

Thema: tcsh :s/old/new/

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40

    tcsh :s/old/new/

    Hallo Leute,

    ich will in einem Tcsh-script mittels

    Code:
    :s/old/new/
    substitutieren. Der String new ist jedoch beim Erstellen des scriptes nicht
    bekannt, denn new soll der erste Parameter des scriptes sein.
    Wie bekomme ich das hin? Ich bräuchte so etwas wie

    Code:
    :s/old/$1/
    Dann wird aber old durch $1 und nicht durch den ersten Parameter ersetzt.
    Wie bekomme ich das hin?

    Daniel

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ungetestet:

    Code:
    ":s/old/"$1"/"
    MfG Bischi
    Geändert von bischi (06-04-2010 um 17:01 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40
    Hallo Bischi,

    das geht noch nicht ganz. Das script rtest (Minimalbeispiel) sieht jetzt so aus:

    Code:
    #!/bin/tcsh
    foreach filename (`ls *JPG`)
       set f = $filename":s/P/"$1"/"
       echo $filename $f
       mv $filename $f
    end
    Im aktuellen Verzeichnis ist nur eine Datei PC050005.JPG.
    Der Aufruf rtest xxx liefert:

    Code:
    localhost:~/t$ rtest xxx
    PC050005.JPG PC050005.JPG:s/P/xxx/
    mv: cannot move `PC050005.JPG' to `PC050005.JPG:s/P/xxx/': No such file or directory
    Exit 1
    Daniel

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Wie sähe denn dein Aufruf ohne Script für eine Datei aus? Bzw - existiert der Ordner xxx?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40
    Zitat Zitat von bischi Beitrag anzeigen
    Wie sähe denn dein Aufruf ohne Script für eine Datei aus?
    Wenn ich das ganze für eine Datei von der Kommandozeile aus mache, dann
    kann ich auf die ganzen Substitutionen verzichten:

    Code:
    mv PC050005.JPG  xxxC050005.JPG
    Zitat Zitat von bischi Beitrag anzeigen
    Bzw - existiert der Ordner xxx?
    Im aktuellen Verzeichnis gibt es keine Unterverzeichnisse. Wenn ich aber
    Unterverzeichnisse PC050005.JPG:s/P/xxx/ anlege, dann bewegt das script
    die Datei PC050005.JPG in dieses Verzeichnis.

    Aber wenn ich die Sache bedenke: Es läuft wieder einmal darauf hinaus,
    Kopfstände und Klimmzüge zu machen, um ein banales Problem zu lösen.
    Es geht hier um irgendwelche Feinheiten bei der Behandlung von Substitutionen
    durch die tcsh.

    Das eigentliche Problem besteht darin, bei allen Bilddateien im Verzeichnis das P im
    Dateinamen durch eine Jahreszahl zu ersetzen. Diese Jahreszahl wollte ich als
    Parameter übergeben. Da aber nur die Jahreszahlen 2004 bis 2010 vorkommen,
    kann ich einfach 7 scripte schreiben, und das Problem ist gelöst.......

    MfG, Daniel

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ohne die tcsh jetzt im Detail zu kennen:

    die mv Synthax sieht wie auf der Bash aus. Und

    Code:
    PC050005.JPG:s/P/xxx/
    sieht für mich nicht wie ein gültiger Ordnernamen aus... Oder hab ich da was falsch verstanden?

    MfG Bischi

    PS: Funktioniert folgendes? Mit oder ohne erstelltem Ordner?

    Code:
    #!/bin/tcsh
    foreach filename (`ls *JPG`)
       set f = "/P/"$1"/"$filename
       echo $filename $f
       mv $filename $f
    end

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40
    Zitat Zitat von bischi Beitrag anzeigen
    Code:
    PC050005.JPG:s/P/xxx/
    sieht für mich nicht wie ein gültiger Ordnernamen aus... Oder hab ich da was falsch verstanden?
    Ich hatte zu Testzwecken ein Verzeichnis PC050005.JPG:s, darin ein Verzeichnis P
    und darin ein Verzeichnis xxx angelegt.
    Der Wert von f ist PC050005.JPG:s/P/xxx/, und genau dahin will mv schreiben.

    Dein script von eben liefert
    Code:
    localhost:~/t$ rtest xxx
    PC050005.JPG /P/xxx/PC050005.JPG
    mv: cannot move `PC050005.JPG' to `/P/xxx/PC050005.JPG': No such file or directory
    Exit 1
    mv versucht wiederum, nach /P/xxx/PC050005.JPG zu schreiben.

  8. #8
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Sorry - müsste natürlich heissen:

    Code:
    #!/bin/tcsh
    foreach filename (`ls *JPG`)
       set f = "P/"$1"/"
       echo $filename $f
       mv $filename $f
    end
    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40
    Code:
    localhost:~/t$ rtest xxx
    PC050005.JPG P/xxx/
    mv: cannot move `PC050005.JPG' to `P/xxx/': No such file or directory
    Exit 1
    Der Wert der Variablen f ist jetzt P/xxx/, und genau dahin will mv schreiben.

  10. #10
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ev. musst du das Verzeichnis zuerst noch anlegen

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  11. #11
    Registrierter Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    40
    Zitat Zitat von bischi Beitrag anzeigen
    Ev. musst du das Verzeichnis zuerst noch anlegen
    Ich glaube, Du hast das Problem falsch verstanden. Ich will Dateien
    innerhalb des aktuellen Verzeichnisses umbenennen. Wenn ich das script
    mit dem Parameter xxx aufrufe, dann soll in jeder *.JPG-Datei im
    aktuellen Verzeichnis das erste P durch xxx ersetzt werden.

    Ich habe jetzt folgendes script zurechtgebastelt. Wahrscheinlich gewinne
    damit ich den Preis für die umständlichste Lösung.

    Code:
    #!/bin/tcsh
    foreach filename (`ls *JPG`)
       set pos  = `expr index $filename P`
       set posl = `expr $pos - 1`
       set posr = `expr $pos + 1`
       set f =   `expr substr $filename 1 $posl`$1`expr substr $filename $posr 1000`
       echo $filename $f
       mv $filename $f
    end

  12. #12
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von DanielDD Beitrag anzeigen
    Ich glaube, Du hast das Problem falsch verstanden.
    Jup - das glaube ich auch

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •