Tutti gli utenti di computer nel mondo, presto o tardi, modificherà una stringa di testo, manualmente o automaticamente. Essere presentato al editor di flusso ma, che ti consente di apportare modifiche massicce al testo in stringhe e file.
Espressioni regolari sulla riga di comando
L'editor di sequenze sed, uno strumento disponibile di default su molte distribuzioni Linux, ti permette di analizzare e trasformare il testo in modo facile e diretto, se detto testo è all'interno di file o solo semplici stringhe sulla riga di comando. Può anche analizzare elenchi di directory, elaborare i risultati dell'elenco e la maggior parte degli altri tipi di informazioni che possono fluire all'interno o all'esterno della sessione del terminale.
Per verificare se sed è abilitato sulla tua distribuzione Linux, scriba sed --version
sulla riga di comando:
Non preoccuparti se la tua versione è un po' più vecchia di quella mostrata qui. Andrà quasi sicuramente bene per gli esempi di cui discutiamo qui. Se lo strumento non è abilitato nella tua distribuzione, puoi installarlo usando sudo apt install sed
per sistemi operativi basati su Ubuntu / Debian, oh sudo yum install sed
per sistemi operativi basati su RedHat / RPM.
sed
applica una piccola trasformazione del testo usando quella che viene chiamata regex o espressione regolare. Un'espressione regolare è un modo e un metodo per esprimere operazioni di ricerca, sostituzione e modifica basate su testo più complesse in un formato ancora leggibile dall'uomo. Le espressioni regolari sono complicate e possono essere difficili da leggere per i principianti. Puoi leggere la nostra guida, Come si usa effettivamente Regex?? Per ulteriori informazioni su come leggere e scrivere Regex.
IMPARENTATO: Come si usa effettivamente Regex??
Ai fini di questo post, ci atterremo a espressioni regolari facili da capire e leggere. Come esempio, la seguente è una semplice sostituzione:
Come potete vedere, abbiamo fatto eco a un piccolo frammento di testo e, successivamente, lo trasformiamo usando lo strumento sed. Usiamo il comando sed 's’ (sostituto) e indichiamo cosa volevamo cambiare. Puoi leggerlo in un altro modo come s|from|to|
dove '|’ è il separatore tra le sezioni / campi, 'S’ è il comando y 'from’ E fino a’ sono le due opzioni passate al comando 's'.
Perché, trasformiamo ¡Hola, fan delle tecnologie informatiche cloud!’ un “Ciao, fan di systempeaker.com!” Modifica di una sola parte del testo utilizzando l'editor di flusso SED. Facciamo un esempio un po' più complesso.
Qui creiamo prima un file con 3 linee usando il echo
comando con reindirizzamento a un file ('>’ crea un nuovo file, sovrascrivendo un file con lo stesso nome se esiste, e '>>’ viene aggiunto a un file senza modificarlo altrimenti). Prossimo, mostriamo il contenuto del file usando il cat
comando.
Successivamente trasformiamo il contenuto del file con il sed
strumento direttamente. Per farlo, specifichiamo l'opzione '-i’ per sed che modifica il file sul posto. L'effettiva istruzione di trasformazione del testo è la stessa di prima. E infine specifichiamo il nome del file alla fine del comando. Quindi controlliamo il contenuto del file e notiamo come è cambiato il nostro input.
Come puoi iniziare a vedere?, o lo sai già dalle esperienze passate, c'è molta potenza disponibile nello strumento sed.
Ravviviamo un po' le cose estendendo la nostra espressione regolare e il metodo di scrittura dell'istruzione di trasformazione del testo sed:
In questo esempio, sostituiamo la lettera 'h’ per H’ e lo abbiamo fatto a livello globale (guarda il qualificatore 'g’ verso la fine della prima istruzione passata a sed) e senza distinzione tra maiuscole e minuscole (osservare la 'i’ qualificatore anche verso la fine della prima affermazione). l'H’ corrisponde anche quando il file contiene 'H’ a causa del qualificatore 'i'.
Successivamente iniziamo una nuova istruzione (fine delle istruzioni / termina con ';’ proprio come in molti altri linguaggi di programmazione) in cui rimuoviamo '.com’ solo cercarlo e sostituirlo con niente.
Nota anche come abbiamo utilizzato separatori alternativi di campo diversi / comando. Nel primo esempio usiamo '|’ che è generalmente un separatore di campo abbastanza raro e facile da usare. Molte persone usano '/', anche se questo può portare a problemi nell'analisi dei nomi delle rotte che spesso contengono '/'.
Essere in grado di utilizzare diversi separatori di alternative di campo / Il comando ti consente di utilizzare facilmente un altro separatore se la tua stringa di testo contiene effettivamente o probabilmente conterrà un carattere specifico.
Utilizzo di sed con i file
Esploriamo un altro esempio basato su sed in cui inseriremo del testo in un file:
In questo esempio, creiamo un file con 5 righe e quindi usiamo un'istruzione sed leggermente complessa per iniettare un separatore '-‘ dopo ogni seconda riga. Sebbene la sintassi sia per lo più autoesplicativa, È interessante notare che il comando 'r’ (leggere / aggiungi testo da un file) specifica il nome del file di iniezione direttamente e mentre è ancora all'interno dell'istruzione principale, senza alcun separatore.
Puoi anche iniziare a vederlo, durante l'apprendimento della sintassi di un'espressione regolare, è utile imparare a fondo la sintassi di sed. È quasi come imparare due nuove lingue straniere, ma il vantaggio è che la sintassi sed può crescere con la tua necessità di ulteriore complessità.
Esploriamo un esempio in cui sostituiamo un'area di testo specifica con qualcos'altro:
In questo esempio, cerchiamo il testo '3', e per quella linea sostituiremo 'C’ per 'Z'. Vedi quanto può essere versatile la sete.
Finire, possiamo analizzare l'analisi di altri tipi di input:
Come potete vedere, noi creiamo 3 file e richiedere un elenco di directory utilizzando il ls
comando. Successivamente prendiamo quell'output come input per sed (usando il comando linux pipe, '|') e trasformiamo parte del nostro elenco di directory in un carattere di sottolineatura.
L'editor di sequenze sed è uno strumento versatile che può aiutarti ad analizzare e trasformare quasi tutti i testi direttamente dalla riga di comando del terminale, se l'input proviene da un semplice echo
dichiarazione, altri strumenti Linux o da un semplice file di testo. Godere!