GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser Sed pour ajouter un caractère dans la nième position de la chaîne correspondante ?

Je dois ajouter un caractère à la nième position (dans ce cas la 2e) d'une chaîne correspondante.
Par exemple, dans un fichier text.txt Je voudrais ajouter un N avant la chaîne et après le " uniquement dans les chaînes contenant blah

text.txt :

"1blah8","na","8blah4"  
"2blah5","na","10blah4"  
"5blah5","na","1blah234"  

Je veux obtenir un text2.txt :

"Ν1blah8","na","Ν8blah4"  
"Ν2blah5","na","Ν10blah4"  
"Ν5blah5","na","Ν1blah234"  

J'ai essayé sed 's/.*blah.*/N&/' text.txt > text2.txt
mais j'obtiens le N avant le " et uniquement dans la première chaîne trouvée de chaque ligne.

Réponse acceptée :

Une autre approche :

$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt 
"N1blah8","na","N8blah4"  
"N2blah5","na","N10blah4"  
"N5blah5","na","1blah234

La regex recherche un " , puis 0 ou plus non-" caractères suivis d'un blah , puis 0 ou plus non-" de nouveau. À cause des parenthèses, ceci est capturé et peut ensuite être référencé comme 1 . Par conséquent, la commande remplacera le modèle correspondant par lui-même (1 ) mais avec un "N annexé. C'est pourquoi le premier " est en dehors des parenthèses. Le /g le modificateur à la fin lui permet de remplacer toutes les chaînes correspondantes dans chaque ligne.

Si votre sed version le prend en charge, vous pouvez le simplifier en :

sed -E 's/"([^"]*blah[^"]*")/"N1/g'

Linux
  1. Comment utiliser la commande WC pour imprimer le nombre de caractères, d'octets, de sauts de ligne et de mots sous Linux

  2. Utilisation d'une référence à une variable de chaîne Bash dans Sed ?

  3. Envelopper le premier caractère d'une chaîne à l'aide de Sed ?

  4. Sed :Insérer le texte après le nième caractère précédant/suivant une chaîne donnée ?

  5. Bash :ajouter une chaîne à la fin du fichier sans saut de ligne

Remplacement de chaîne dans Bash

COMMENT UTILISER TAIL COMMAND

Comment utiliser la commande head

COMMENT UTILISER L'EDITEUR SED

Top 20 des commandes sed à utiliser

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