Linux Tutorial for Beginners: Introduction to Linux Operating System
Sommario:
Abbastanza spesso quando si lavora con file di testo è necessario trovare e sostituire stringhe di testo in uno o più file.
sed
è un sogno. Può eseguire manipolazioni di testo di base su file e flussi di input come pipeline. Con
sed
puoi cercare, trovare e sostituire, inserire ed eliminare parole e righe. Supporta espressioni regolari di base ed estese che consentono di abbinare modelli complessi.
, parleremo di come trovare e sostituire le stringhe con
sed
. Ti mostreremo anche come eseguire una ricerca ricorsiva e sostituirla.
Trova e sostituisci la stringa con
sed
Esistono diverse versioni di
sed
, con alcune differenze funzionali tra loro. macOS utilizza la versione BSD e la maggior parte delle distribuzioni Linux viene fornita con GNU
sed
preinstallato di default. Useremo la versione GNU.
La forma generale di ricerca e sostituzione del testo usando
sed
assume la forma seguente:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Di defaultsed
scrive il suo output nell'output standard. Questa opzione dice ased
di modificare i file in atto. Se viene fornita un'estensione (ex -i.bak) verrà creato un backup del file originale.s
- Il comando sostitutivo, probabilmente il comando più usato in sed./ / /
- Carattere delimitatore. Può essere qualsiasi personaggio ma di solito viene utilizzato il carattere barra (/
).SEARCH_REGEX
: stringa normale o un'espressione regolare da cercare.REPLACEMENT
- La stringa di sostituzione.g
- Flag di sostituzione globale. Per impostazione predefinita,sed
legge il file riga per riga e modifica solo la prima occorrenza diSEARCH_REGEX
su una riga. Quando viene fornito il flag di sostituzione, tutte le occorrenze verranno sostituite.INPUTFILE
- Il nome del file su cui si desidera eseguire il comando.
È buona norma inserire virgolette attorno all'argomento in modo che i meta-personaggi della shell non si espandano.
Vediamo esempi su come usare il comando
sed
per cercare e sostituire il testo nei file con alcune delle sue opzioni e flag più comunemente usate.
A scopo dimostrativo, utilizzeremo il seguente file:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Con il flag di sostituzione globale
sed
sostituisce tutte le occorrenze del modello di ricerca:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Come avrai notato, nell'esempio precedente viene anche sostituita la sottostringa
foo
all'interno della stringa
foobar
. Se questo non è il comportamento desiderato, utilizzare l'espressione di limite di parole (
\b
) ad entrambe le estremità della stringa di ricerca. Questo assicura che le parole parziali non siano abbinate.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Per rendere insensibile al maiuscolo / minuscolo del motivo, utilizzare il flag
I
Nell'esempio seguente stiamo usando entrambi i flag
g
e
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
L'opzione più semplice e molto più leggibile è usare un altro carattere delimitatore. Molte persone usano la barra verticale (
|
) o i due punti (:) ma puoi usare qualsiasi altro carattere:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Puoi anche usare espressioni regolari. Ad esempio, per cercare tutti i numeri di 3 cifre e sostituirli con il
number
stringa che useresti:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Un'altra caratteristica utile di sed è che puoi usare il carattere
&
commerciale
&
che corrisponde al modello abbinato. Il personaggio può essere usato più volte.
Ad esempio, se si desidera aggiungere parentesi graffe
{}
attorno a ciascun numero di 3 cifre, digitare:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Ultimo ma non meno importante, è sempre una buona idea fare un backup quando si modifica un file con
sed
. Per fare ciò basta fornire un'estensione all'opzione
-i
. Ad esempio, per modificare
file.txt
e salvare il file originale come
file.txt.bak
dovrai usare:
sed -i.bak 's/foo/linux/g' file.txt
ls
Trova e sostituisci ricorsivo
A volte si desidera cercare ricorsivamente nelle directory i file contenenti una stringa e sostituire la stringa in tutti i file. Questo può essere fatto usando comandi come
find
o
grep
per trovare ricorsivamente i file nella directory e reindirizzare i nomi dei file su
sed
.
Il seguente comando cercherà ricorsivamente i file nella directory di lavoro corrente e passerà i nomi dei file a
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Per evitare problemi con i file che contengono spazio nei loro nomi usa l'opzione
-print0
che dice a
find
di stampare il nome del file, seguito da un carattere null e reindirizza l'output a
sed
usando
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Per escludere una directory utilizzare l'opzione
-not -path
. Ad esempio, se si sta sostituendo una stringa nel repository git locale per escludere tutti i file che iniziano con punto (
.
), Utilizzare:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Un'altra opzione è quella di utilizzare il comando
grep
per trovare ricorsivamente tutti i file contenenti il modello di ricerca e quindi reindirizzare i nomi dei file su
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Conclusione
Sebbene all'inizio possa sembrare complicato e complesso, la ricerca e la sostituzione del testo nei file con
sed
è molto semplice.
Per saperne di più sui comandi, le opzioni e i flag sed, visita il manuale GNU sed e il tutorial Grymoire sed. Se hai domande o feedback, non esitare a lasciare un commento.
sed terminalCome trovare e sostituire tutte le immagini in Word contemporaneamente
È Facile sostituire tutte le immagini in Microsoft Word. Usa il metodo Trova e sostituisci per trovare l`immagine che desideri e sostituisci tutte le immagini con la nuova immagine.
Come trovare e sostituire caratteri jolly in Excel
Un modo semplice per trovare e sostituire caratteri jolly in Excel come testo normale. Trova caratteri jolly come testo normale in Excel utilizzando caratteri speciali tilde
Come usare facebook trova wifi per trovare hotspot gratuiti
Ecco un breve howto sulla nuova funzione Trova WiFi di Facebook per trovare hotspot gratuiti. Controlla!