Σε ορισμένες περιπτώσεις πρέπει να διαγράψουμε μια συγκεκριμένη γραμμή από ένα αρχείο ή περισσότερα, για παράδειγμα, μου συνέβη ότι είχα μια ολόκληρη λίστα αρχείων και πρέπει να διαγράψω τη γραμμή # 27 όλων αυτών (η γραμμή # 27 είναι αυτή ενός ACL , κανόνας, κανόνας, διαμόρφωση), είτε μπορώ να επεξεργαστώ αρχείο με αρχείο είτε μπορώ να επιτύχω ό, τι χρειάζομαι χρησιμοποιώντας την εντολή δίψα και ένα σενάριο bash (προαιρετικό).
Αλλά, ας δοκιμάσουμε ένα μόνο αρχείο κάπως απλό.
Έχουμε το αρχείο distros-deb.txt που περιέχει αυτό:
debian
kubuntu
archlinux
λύσεις
μέντα
Με άλλα λόγια, το αρχείο distros-deb.txt είναι στο οποίο θα τοποθετήσουμε τις διανομές που βασίζονται στο Debian, αλλά εκεί βλέπουμε ότι στη γραμμή # 3 υπάρχει το "archlinux", μια διανομή που προφανώς δεν έχει καμία σχέση με το Debian, οπότε πρέπει να εξαλείψουμε αυτή τη γραμμή. Για να εξαλείψουμε τη γραμμή # 3 αυτού του αρχείου θα θέσουμε τα εξής:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Η εξήγηση αυτής της γραμμής είναι κάπως εύκολη, με διψασμένος "τρισδιάστατος" δηλώνουμε ότι θα διαγράψουμε τη γραμμή # 3, με distros-deb.txt Υποδεικνύουμε σε ποιο αρχείο θα δουλέψουμε, δηλαδή, διαγράψτε τη γραμμή # 3 αυτού του αρχείου, μέχρι εδώ αν πατήσουμε Enter θα μας δείξει τι θέλουμε, αλλά στο τερματικό, έτσι με > distros-deb-ok.txt δηλώνουμε ότι αντί να δείξουμε το αποτέλεσμα στο τερματικό, ότι το έβαλε σε ένα αρχείο με αυτό το όνομα.
Τι είναι απλό;
Επίσης, μπορούμε να αποφύγουμε τη χρήση του > distros-deb-ok.txt χρησιμοποιώντας μια σωστή παράμετρο του δίψα, η παράμετρος -i
Δηλαδή, σε περίπτωση που θέλουμε να διαγράψουμε τη γραμμή από το αρχείο και να την αποθηκεύσουμε με το ίδιο όνομα (και όχι σε άλλο αρχείο), απλώς προσθέστε την παράμετρο -i :
sed -i "3d" distros-deb.txt
Αυτό θα αφαιρέσει τη γραμμή # 3 από το distros-deb.txt και θα την αποθηκεύσει.
Τι γίνεται αν θέλω μια σειρά γραμμών, δηλαδή να αφαιρέσω τη γραμμή # 3 αλλά και # 4 και # 5; Για να το επιτύχουμε αυτό θέτουμε το εύρος από 3 έως 5, δηλαδή:
sed -i "3,5d" distros-deb.txt
Και θα μου δείξει μόνο το debian και το kubuntu
Τι γίνεται λοιπόν αν θέλω να διαγράψω από τη γραμμή 2 στην τελευταία, όταν δεν ξέρω τις συνολικές γραμμές;
Απλώς χρησιμοποιήστε το σύμβολο δολαρίου - »$
sed -i "2,$d" distros-deb.txt
Σε περίπτωση που θέλετε να καταργήσετε από την πρώτη γραμμή στο # 4, τότε απλώς βάζουμε την τιμή 1 στην αρχή:
sed -i "1,4d" distros-deb.txt
Αυτό ήταν το παν, μια πολύ χρήσιμη συμβουλή όταν θέλετε να δημιουργήσετε σενάρια bash για αυτοματοποίηση εργασιών και πρέπει να τροποποιήσετε και να εξαλείψετε γραμμές αρχείων διαμόρφωσης, για τροποποίηση που μπορούμε να χρησιμοποιήσουμε δίψα o perl, καθώς και για να εξαλείψουμε ξέρουμε ήδη πώς να το κάνουμε με το sed
αφορά