Προς το περιεχόμενο

Επεξεργασία ενός αρχείου με shell script


nikosdimos

Προτεινόμενες αναρτήσεις

Καλησπέρα. Έχω ένα αρχείο μέσα στο οποίο έχω κάποια URL τα οποία αυτά URL θέλω να τα μετατρέψω σε links

 

Για να το κάνω πιο παραστατικό.

 

Έχω ένα αρχέιο που είναι κάπως έτσι:

>http://trexa.gyrevopoulos.com/1
http://trexa.gyrevopoulos.com/2
http://trexa.gyrevopoulos.com/3
http://trexa.gyrevopoulos.com/4
http://trexa.gyrevopoulos.com/5
http://trexa.gyrevopoulos.com/6
http://trexa.gyrevopoulos.com/7

 

και θέλω να τα μετατρέψω ώστε να είναι έτσι:

><a href=http://trexa.gyrevopoulos.com/1>1</a>
<a href=http://trexa.gyrevopoulos.com/2>2</a>
<a href=http://trexa.gyrevopoulos.com/3>3</a>
<a href=http://trexa.gyrevopoulos.com/4>4</a>
<a href=http://trexa.gyrevopoulos.com/5>5</a>
<a href=http://trexa.gyrevopoulos.com/6>6</a>
<a href=http://trexa.gyrevopoulos.com/7>7</a>

 

Tα 1,2,3 που έβαλα στο <a href=...><--ΕΔΩ--></a> μπορεί να προέρχονται και από μια αύξουσα αρίθμηση. Δεν σημαίνει δηλαδή οτι έχει απαραίτητα κάποια σχέση με τα 1,2,3 που είναι στο href

 

Ευχαριστώ όποιον μπορέσει να με βοηθήσει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βρήκα λύση στο πρόβλημά μου.

 

Κατέβασα το Greasemonkey και με αυτό έδω το userscript έκανα ακριβώς αυτό που ήθελα.

 

Παρόλα αυτά αν κάποιος μόνο και μόνο για την γνώση που θα μπορούσε να προσφέρει και στους υπόλοιπους σχετικά με το shell scripting μπορεί να δώσει μια λύση είναι παραπάνω από ευπρόσδεκτη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με την sed: http://www.oracle.com/technology/pub/articles/dulaney_sed.html

 

Όποτε μπορέσω, θα κάνω μερικές δοκιμές και αν βγαίνει σωστό το σκριπτάκι, θα το ποστάρω...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

κάτι τέτοιο;

>y=1; for x in `cat file.txt`; do echo "<a href=$x>$y</a>"; let y+=1; done

 

ΥΣ. ή πιο γκουρουδίστικα:

 

>while read line; do a=${line##*\/}; printf "<a href=%s>%s</a>\n" "$line" "$a"; done<file.txt

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

κάτι τέτοιο;

>y=1; for x in `cat file.txt`; do echo "<a href=$x>$y</a>"; let y+=1; done

ΥΣ. ή πιο γκουρουδίστικα:

 

>while read line; do a=${line##*\/}; printf "<a href=%s>%s</a>\n" "$line" "$a"; done<file.txt

 

 

Ωραίος nske δούλεψε αυτό που πρότεινες.:wink:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και άλλο ένα ;-)

>
sed -e 's/\(.*\/\)\(.*\?\)$/<a href="\1\2">\2<\/a>/' -i filename

 

ή μέσα από vim σε command mode:

>
:%s/\(.*\/\)\(.*\)\?$/<a href="\0">\2<\/a>/

There's more than one way to do it ;-)

 

[μεγάλος-master-mode]

@nikosdimos και υπόλοιποι και χωρίς καμία διάθεση να κάνω υποδείξεις αριστερά δεξιά ούτε να το παίξω παντογνώστης:

 

Πολλές φορές, προερχόμενοι από μακροχρόνια χρήση Άλλων Λειτουργικών® τείνουμε να αντιμετωπίζουμε το Linux σαν να ήταν κάποιο από τα Άλλα Λειτουργικά®. Η αντιμετώπιση αυτή μας οδηγεί στο να παίρνουμε μη-βέλτιστες αποφάσεις, ψάχνοντας το προγραμματάκι εκείνο που κάνει ακριβώς τη δουλειά που θέλουμε, ενώ κάτι στο πίσω μέρος του μυαλού μας μας λέει ότι θα έπρεπε τα πράγματα να είναι απλούστερα.

 

Η πραγματικότητα όμως είναι διαφορετική: το 99,9% των προγραμμάτων που υπάρχουν στα windows είναι παντελώς άχρηστα στο Linux, διότι αυτό έρχεται μαζί με ένα υπερ-πλήρες σετ εργαλείων (GNU και μη): find, bash, awk, sed, grep, γλώσσες προγραμματισμού που υπάρχουν σε κάθε διανομή όπως οι perl, python και ruby. Προσωπικά αυτό είναι για μένα το μεγαλύτερο ατού ενός UNIXοειδούς συστήματος (ακόμα και του MacOS X), το ότι έχει πολλά μικρά εργαλεία που το καθένα κάνει τη δουλειά του πάρα πολύ καλά, ενώ παρέχει δυνατότητα διασύνδεσης των μικρών αυτών εργαλείων ώστε να εξυπηρετούνται πιο πολύπλοκες λειτουργίες. Π.χ. το υποθετικό "Ultra Search and Replace for Windows" θα είναι πάντα υποδεέστερο του συνδυασμού find - grep - sed στο Linux, απλά και μόνο γιατί η αρχή λειτουργίας του 2ου συνδυασμού του επιτρέπει να κάνει πρακτικά οτιδήποτε, χωρίς να χρειάζεται κάποιος να έχει μεριμνήσει να προβλέψει την κάθε ειδική περίπτωση στο GUI της εφαρμογής.

 

Που θέλω να καταλήξω; Μάθετε τα εργαλεία που έχετε στη διάθεσή σας. Μάθετε βασικό bash scripting, τι κάνουν βασικές εντολές όπως οι awk, sed, grep, find, rename, μάθετε να χρησιμοποιείτε ένα καλό editor (π.χ. vim ή emacs) και ξεκινήστε να γράφετε απλά πράγματα σε μια scripting γλώσσα (προσωπικά προτιμώ ruby ή python, αλλά και η perl είναι μανούλα σε τέτοια πράγματα). Τότε μόνο θα δείτε πως δεν υπάρχει όριο στο τι μπορεί να κάνει κάποιος με ένα UNIXοειδές σύστημα ;-)

[/μεγάλος-master-mode]

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

[μεγάλος-master-mode]

@nikosdimos και υπόλοιποι και χωρίς καμία διάθεση να κάνω υποδείξεις αριστερά δεξιά ούτε να το παίξω παντογνώστης:

 

Πολλές φορές, προερχόμενοι από μακροχρόνια χρήση Άλλων Λειτουργικών® τείνουμε να αντιμετωπίζουμε το Linux σαν να ήταν κάποιο από τα Άλλα Λειτουργικά®. Η αντιμετώπιση αυτή μας οδηγεί στο να παίρνουμε μη-βέλτιστες αποφάσεις, ψάχνοντας το προγραμματάκι εκείνο που κάνει ακριβώς τη δουλειά που θέλουμε, ενώ κάτι στο πίσω μέρος του μυαλού μας μας λέει ότι θα έπρεπε τα πράγματα να είναι απλούστερα.

 

Η πραγματικότητα όμως είναι διαφορετική: το 99,9% των προγραμμάτων που υπάρχουν στα windows είναι παντελώς άχρηστα στο Linux, διότι αυτό έρχεται μαζί με ένα υπερ-πλήρες σετ εργαλείων (GNU και μη): find, bash, awk, sed, grep, γλώσσες προγραμματισμού που υπάρχουν σε κάθε διανομή όπως οι perl, python και ruby. Προσωπικά αυτό είναι για μένα το μεγαλύτερο ατού ενός UNIXοειδούς συστήματος (ακόμα και του MacOS X), το ότι έχει πολλά μικρά εργαλεία που το καθένα κάνει τη δουλειά του πάρα πολύ καλά, ενώ παρέχει δυνατότητα διασύνδεσης των μικρών αυτών εργαλείων ώστε να εξυπηρετούνται πιο πολύπλοκες λειτουργίες. Π.χ. το υποθετικό "Ultra Search and Replace for Windows" θα είναι πάντα υποδεέστερο του συνδυασμού find - grep - sed στο Linux, απλά και μόνο γιατί η αρχή λειτουργίας του 2ου συνδυασμού του επιτρέπει να κάνει πρακτικά οτιδήποτε, χωρίς να χρειάζεται κάποιος να έχει μεριμνήσει να προβλέψει την κάθε ειδική περίπτωση στο GUI της εφαρμογής.

 

Που θέλω να καταλήξω; Μάθετε τα εργαλεία που έχετε στη διάθεσή σας. Μάθετε βασικό bash scripting, τι κάνουν βασικές εντολές όπως οι awk, sed, grep, find, rename, μάθετε να χρησιμοποιείτε ένα καλό editor (π.χ. vim ή emacs) και ξεκινήστε να γράφετε απλά πράγματα σε μια scripting γλώσσα (προσωπικά προτιμώ ruby ή python, αλλά και η perl είναι μανούλα σε τέτοια πράγματα). Τότε μόνο θα δείτε πως δεν υπάρχει όριο στο τι μπορεί να κάνει κάποιος με ένα UNIXοειδές σύστημα ;-)

[/μεγάλος-master-mode]

 

Συμφωνώ μαζί σου απόλυτα ότι το linux έχει απείρως μεγαλύτερες δυναντότητες στο να μεταχειρίζεσαι τα αρχεία.

 

Άλλωστε γιαυτό ζήτησα και κάποιος να μου πει την συγκεκριμένη μια γραμμή να κάνω αυτό το πράγμα δεν ξεκίνησα να ψάχνω addons και τέτοια με την μια.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 3 εβδομάδες αργότερα...

Μετά από μια μικρή ενασχόληση έφτιαξα ένα προγραμματάκι σε ruby που κάνει αυτό κάνει και το shell script που ήθελα να φτιάξω. Ελπίζω να είναι χρήσιμο για κάποιους που θέλουν να έχουν ένα παράδειγμα για ruby.

>
source_file = File.open("source.html")
new_file = File.new("output.html", "w")

begin
   count = 0
   while (line = source_file.readline)
       if line =~ /\<a href\=\"http\:\/\/anonym\.to\/\?http\:\/\/rapidshare\.com/
           count += 1
           first_split = line.split(/\?/)
           second_split = first_split[1].split(/\"/)
           new_file.print "<a href=" + second_split[0] + ">"+ count.to_s + "</a>\n"
       end
   end
   rescue EOFError
   source_file.close
   new_file.close
   puts "Done!"
end

Για να το χρησιμοποιήσει κάποιος πρέπει να έχει εγκατεστημένη την Ruby στον υπολογιστή του.

 

Το προγραμματάκι τρέχει γράφωντας "ruby linkify.rb"

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...