GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de sed pour remplacer entre un modèle spécifique

C'est possible avec GNU sed. Choisissez l'une de ces deux formes en fonction de la gourmandise du remplaçant.

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

Comme l'indique le manuel, "\L transforme le remplacement en minuscule jusqu'à un \U ou \E est trouvé". & est le texte correspondant à la regex.

J'ai modifié le fichier d'exemple pour montrer que vous devez choisir judicieusement entre le geedy =.*, et le =[^,]*, non gourmand expressions régulières :

$ 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

Sur n'importe quel awk compatible POSIX , vous pouvez utiliser le tolower() fonction

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

Utilisez le mktemp() fonction pour créer un fichier temporaire pour rediriger la sortie de la commande ci-dessus, puis rediriger vers l'arrière pour enregistrer sur place. Ou utilisez GNU awk>=4.1 avec -i inplace

Une autre variante de la version compatible POSIX, utilisant match() fonction serait de faire

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

Linux
  1. Comment remplacer une chaîne dans un ou plusieurs fichiers ?

  2. Obtenir mtime d'un fichier spécifique en utilisant Bash ?

  3. Utiliser grep et sed pour rechercher et remplacer une chaîne

  4. Supprimer un caractère spécifique en utilisant awk ou sed

  5. Rechercher et remplacer du texte dans un fichier entre une plage de lignes à l'aide de sed

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Tutoriel Unix Sed :Rechercher et remplacer du texte dans un fichier à l'aide de RegEx

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier

Insérer plusieurs lignes dans un fichier après le motif spécifié à l'aide d'un script shell

Comment modifier un fichier sur place en utilisant awk ? (comme avec sed -i)