J'ai un énorme fichier contenant des ensembles de données tels que :
100 S|||
100 S|d1|||88|||
100 S|0d|f6||f630|589f||
Je dois remplacer |||
par |||||||
, uniquement si la ligne ne contient plus de tuyaux autres qu'une seule |||
séquence.
J'ai essayé d'utiliser la commande sed pour cette exigence :
sed -i 's/|||/|||||||/g' input.txt
Cependant, il modifie également les enregistrements en deuxième ligne, ce qui n'est pas prévu.
Quelle serait l'utilisation correcte de la commande ? Toute aide sera grandement appréciée.
Vous pouvez utiliser cette sed
commande avec des groupes de capture pour faire correspondre les caractères non pi[e avant et après|||
:
sed -E 's/^([^|]*)(\|\|\|)([^|]*)$/\1\2||||\3/' file
100 S|||||||
100 S|d1|||88|||
100 S|0d|f6||f630|589f||
Des détails:
^
: Début([^|]*)
: correspond à 0 ou plusieurs caractères non-canal dans le groupe de capture #1(\|\|\|)
: Faites correspondre 3 caractères pipe dans le groupe de capture #2([^|]*)
: correspond à 0 ou plusieurs caractères non-canal dans le groupe de capture n°3$
: Finir\1\2||||\3
est un modèle de remplacement qui s'insère ||||
après la référence arrière #2, c'est-à-dire \2
lors de la remise en place \1
et \3
telle quelle.Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots