Biftekoupolis

Τάσεις ημερών

Posted in thoughts by trelobifteki on Νοέμβριος 24, 2008

Μέσα από το μεμονωμένο τις περισσότερες φορές περιβάλλον μου παρατήρησα τα εξής:

1) Προσεγμένο ντύσιμο (καλές μάρκες, πουκάμισα, σακάκια, μπλα μπλα μπλα) και φουλάρι από αυτά που φορούν οι Παλαιστίνιοι.

2) Η λέξη phail είτε fail είτε epic fail (σε υπερθετικό βαθμό) χρησιμοποιείται ιδιαίτερα στον κόσμο των πληροφορικάριων.

3) Μου κλέψανε το τάσι από την μία ρόδα του αυτοκινήτου μου. Κάποιος άλλος μου είπε ότι του κλέψανε την κεραία του ραδιοφώνου και για να την ανταλλάξει πήρε και αυτός μία από κάποιο άλλο αμάξι.

Ηθικό δίδαγμα: Μην σχολιάζετε τίποτα από τα παραπάνω. Απλά, δεν αξίζει.

Advertisements

Χρησιμοποιώντας το sed

Posted in computer science by trelobifteki on Νοέμβριος 18, 2008

Χρειάστηκε χτες να φτιάξω ενα scriptaki που θα μπορεί να μου εκτυπώνει value από attributes σε ένα XML schema file.

Ας πουμε, ότι το XML schema περιείχε το παρακάτω κείμενο μέσα:

  <xs:simpleType name="MyTest">
    <xs:restriction base="xs:string">
      <xs:enumeration value="This"/>
      <xs:enumeration value="is"/>
      <xs:enumeration value="a"/>
      <xs:enumeration value="test" />
    </xs:restriction>
  </xs:simpleType>

Αυτό βρίσκεται μέσα σε διάφορα άλλα, όπως φαντάζεστε…

Το πρόβλημα είναι το εξής: Πως θα εκτυπώσω από αυτό το αρχείο μονάχα τις enumerated τιμές (this, is, a, test);

Η παρακάτω εντολή (1 εντολή παρακαλώ) της sed, μας βοηθάει. Βέβαια ίσως να μην είναι θεωρητικά 100% ακριβής (και τα regexp που χρησιμοποιώ δεν ικανοποιούν όλες τις περιπτώσεις, αλλα παίρνετε την ιδέα.

sed -n ‘/<xs:simpleType name=»MyTest»>/,/<\/xs:simpleType>/ s/[ ]*<xs:enumeration[ ]*value=»\(.*\)»[ ]*\/>/\1 /p ‘ test.xsd

Καταλαβαίνω ότι τα regular expressions δεν είναι και τα καλύτερα. Π.χ. αντί για (.*) (δηλαδή, αυτό που περιμένεις να έχει μέσα) ίσως να πρέπει να βάλεις ([^»]*) (δηλαδή αυτό που δεν πρέπει να έχει μέσα). Τέλος πάντων, Όλα ενδιαφέροντα είναι και δέχομαι οποιαδήποτε comments.

Από την άλλη, ας εξηγήσω λίγο το παραπάνω που με ενδιαφέρει περισσότερο.

  • Η παράμετρος -n δηλώνει να μην εκτυπωθεί στην οθόνη το κείμενο που θα εισάγουμε
  • το πρώτο μέρος (/[regular expression/,/regular expression/) δηλώνει το μέρος του κειμένου όπου θα εκτελεστεί η εντολή. Το ενδιαφέρον είναι ότι ορίζει την αρχή και το τέλος σύμφωνα με regular expressions (μπορείς βέβαια και με γραμμές, αλλά αυτό το κάνει τρομερά πρακτικό). Παρατήρησα ότι τελειώνει στην πιο πρόσφατη γραμμή που συναντά το δεύτερο regexp.
  • To δεύτερο μέρος είναι πιο κλασσικό (αντικατάσταση). Αντικαθιστώ αυτό που κάνει match το regular expressions (προσοχή στις παρενθέσεις) με αυτό που βρίσκεται μέσα στις παρενθέσεις (\1). Επιπλέον διαλέγω την επιλογή p για να προσπεράσει την -n που είχα βάλει στην αρχή και να εκτυπώσει το εσωτερικό.

Δηλαδή, το πολύ ενδιαφέρον είναι ότι μπορείς να μαζέψεις απο ένα συγκεκριμένο σημείο σε ένα κείμενο που έχεις καταλάβει το pattern, ένα στοιχείο που ανήκει πάλι σε ένα pattern. Πολύ βολικό και σε μία εντολή κάνεις πολύ ωραία πράγματα.

Tagged with: