Αρχική σελίδα » πως να » Πώς να αφαιρέσετε γραμμές από τη μέση ενός αρχείου χρησιμοποιώντας το τερματικό Linux

    Πώς να αφαιρέσετε γραμμές από τη μέση ενός αρχείου χρησιμοποιώντας το τερματικό Linux

    Όταν διαχειριστείτε τις δικές σας servers, ένα από τα πράγματα που μπορείτε να καταλήξετε να χρειάζεται να κάνουμε σε μια ημι-τακτική βάση είναι απόσπασμα πράγματα από τα μέσα του ένα αρχείο. Ίσως είναι ένα αρχείο καταγραφής, ή πρέπει να προσθέσετε ένα τραπέζι από τη μέση του αντιγράφου ασφαλείας MySQL, όπως έκανα.

    Για να υπολογίσουμε τους αριθμούς γραμμών, μια απλή εντολή grep -n έκανε την εργασία (το όρισμα -n εξάγει τους αριθμούς γραμμών). Αυτό το καθιστούσε εύκολο να καταλάβεις τι χρειάζομαι για να αποσπάσω.

    grep -n wp_posts howtogeekdb010114.bak | περισσότερο

    Αποτελέσματα σε κάτι σαν αυτό, το οποίο δείχνει τους αριθμούς γραμμών πάνω στην αριστερή πλευρά της εξόδου. Η σωστή τοποθέτηση όλων σε "περισσότερα" εξασφαλίζει ότι μπορείτε να δείτε την πρώτη γραμμή χωρίς να το μετακινηθείτε. Τώρα έχετε τον αριθμό γραμμής για να ξεκινήσετε με, και ίσως το ένα να τελειώσει με.

    4160: - δομή Πίνακας για 4163 «wp_posts» πίνακα: ΠΙΝΑΚΑΣ DROP αν υπάρχει «wp_posts»? 4166: CREATE TABLE 'wp_posts' (4203: - ντάμπινγκ στοιχεία για το τραπέζι του 4206 'wp_posts': Γράψτε την 'wp_posts' LOCK ΠΙΝΑΚΕΣ? 4207: / * 40000 απενεργοποιήσετε πλήκτρα ALTER TABLE 'wp_posts' * /? 4208: wp_posts INSERT INTO» 'VALUES (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11

    Θα μπορούσατε, βεβαίως, απλώς να διοχετεύσετε την έξοδο από το grep σε άλλο αρχείο, όπως αυτό:

    grep λέξη-κλειδί filename.txt> outputfile

    Στην περίπτωσή μου, αυτό δεν ήθελε να λειτουργήσει, επειδή δεν μπορούσα να εισάγω το προκύπτον αντίγραφο ασφαλείας για κάποιο λόγο. Έτσι, βρήκα έναν διαφορετικό τρόπο για να εξαγάγετε τις γραμμές χρησιμοποιώντας sed, και αυτή η μέθοδος δεν λειτούργησε.

    sed -n '4160,4209p' howtogeekdb0101140201.bak> outputfile

    Βασικά η σύνταξη είναι όπως αυτή, φροντίζοντας να χρησιμοποιήσετε το όρισμα -n και να συμπεριλάβετε το "p" μετά τον δεύτερο αριθμό γραμμής.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' όνομα αρχείου> όνομα_εφαρμογής

    Με άλλους τρόπους μπορείτε να τραβήξετε συγκεκριμένες γραμμές στη μέση ενός αρχείου; Μπορείτε να χρησιμοποιήσετε την εντολή «κεφάλι» με τον αριθμό επιχείρημα + σε μόλις διαβάσετε τις πρώτες χ γραμμές ενός αρχείου και στη συνέχεια χρησιμοποιήστε ουρά για να εξαγάγετε αυτές τις γραμμές. Δεν είναι η καλύτερη επιλογή, πολλά έξοδα. Απλούστερη επιλογή; Μπορείτε να χρησιμοποιήσετε την εντολή split για να μετατρέψετε το αρχείο σε πολλά αρχεία απευθείας στον αριθμό γραμμής που θέλετε και στη συνέχεια να εξαγάγετε τις γραμμές χρησιμοποιώντας κεφαλή ή ουρά.

    Ή μπορείτε απλά να χρησιμοποιήσετε sed.