GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di sed per sostituire uno schema specifico

È possibile con GNU sed. Scegli una di queste due forme in base all'ingordigia del sostituto.

sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file

Come afferma il manuale, "\L trasforma la sostituzione in minuscolo fino a un \U o \E viene trovato". & è il testo corrispondente alla regex.

Ho modificato il file di esempio per mostrare che dovresti saggiamente scegliere tra il geniale =.*, e il non avido =[^,]*, espressioni regolari:

$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH

Su qualsiasi awk conforme a POSIX , puoi utilizzare il tolower() funzione

awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file

Usa mktemp() funzione per creare un file temporaneo per reindirizzare l'output del comando precedente e quindi reindirizzare nuovamente per salvare sul posto. Oppure usa GNU awk>=4.1 con -i inplace

Un'altra variante della versione conforme a POSIX, che utilizza match() funzione sarebbe fare

awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'

Linux
  1. Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern

  2. Come sostituire una stringa in un file?

  3. Corrispondenza di pattern multilinea utilizzando Sed, Awk o Grep?

  4. Sostituire una riga con un altro contenuto utilizzando Sed e Parallel per un file di grandi dimensioni?

  5. Ottieni mtime di un file specifico usando Bash?

Come rimuovere le righe da un file usando il comando Sed

Tutorial Unix Sed:trova e sostituisci testo all'interno di un file usando RegEx

Tutorial Unix Sed:come scrivere su un file usando Sed

Come utilizzare Sed per trovare e sostituire una stringa in un file

Utilizzo di grep e sed per trovare e sostituire una stringa

Rimuovi un carattere specifico usando awk o sed