A sed
script qui ne remplacera que la première occurrence de "Apple" par "Banana".
Exemple
Input: Output:
Apple Banana
Apple Apple
Orange Orange
Apple Apple
C'est le simple script : Note de l'éditeur : travaille avec GNU sed
seulement.
sed '0,/Apple/{s/Apple/Banana/}' input_filename
Les deux premiers paramètres 0
y /Apple/
sont le spécificateur de plage. Le site s/Apple/Banana/
est ce qui est exécuté dans cette plage. Donc, dans ce cas, "dans la plage du début ( 0
) jusqu'à la première instance de Apple
, remplacer Apple
con Banana
. Seul le premier Apple
seront remplacés.
Le contexte : Dans les systèmes traditionnels sed
le spécificateur de plage est également "commencer ici" et "finir ici" (inclus). Cependant, le "début" le plus bas est la première ligne (ligne 1), et si le "fin ici" est une regex, alors elle est seulement tentée de correspondre à la ligne suivante après le "début", donc la fin la plus proche possible est la ligne 2. Donc, puisque la plage est inclusive, la plus petite plage possible est "2 lignes" et la plus petite plage de départ est à la fois les lignes 1 et 2 (c'est-à-dire que s'il y a une occurrence sur la ligne 1, les occurrences sur la ligne 2 seront également modifiées, ce qui n'est pas souhaité dans ce cas). GNU
sed ajoute sa propre extension en permettant de spécifier start comme "pseudo". line 0
afin que la fin de la plage puisse être line 1
en lui permettant une plage de "seulement la première ligne" si l'expression rationnelle correspond à la première ligne.
Ou une version simplifiée (un RE vide comme //
signifie réutiliser celui qui est spécifié avant lui, donc c'est équivalent) :
sed '0,/Apple/{s//Banana/}' input_filename
Et les accolades sont en option pour le s
ce qui est également équivalent :
sed '0,/Apple/s//Banana/' input_filename
Tous ces logiciels fonctionnent sous GNU sed
seulement.
Vous pouvez également installer GNU sed sur OS X en utilisant homebrew brew install gnu-sed
.