Nécessité d’un oneliner pour insérer un caractère après la nième occurrence du délimiteur sur la 2ème ligne dans unix

Bonjour j’ai besoin de oneliner pour insérer le caractère après la nième occurrence du délimiteur sur la 2ème ligne dans unix; Les critères sont ceux-ci.

  1. Trouver la position de la nième occurrence du délimiteur.
  2. Insérer un caractère après la nième occurrence.
  3. Ceci est sur la 2ème ligne seulement.

Note: Je le fais sous Linux.

Avec awk :

FICHIER D’ENTRÉE

1 foo bar base 2 foo bar base 

CODE

 awk 'NR==2{$2=$2"X"; print}' file 
  • vous pouvez spécifier un délimiteur avec -F
  • NR pour spécifier la ligne sur laquelle nous travaillons
  • $2 est la 2ième valeur séparée par un espace (dans ce cas)
  • $2=$2"X" est une concaténation
  • print seul imprimer la ligne entière

SORTIE

 2 fooX bar base 

Supposons que nous ayons le fichier d’entrée:

 $ cat file 1 foo bar base 2 foo bar base 

Pour insérer le caractère X après la 3ème occurrence de l’espace délimiteur, utilisez:

 $ sed -r '2 s/([^ ]* ){3}/&X/' file 1 foo bar base 2 foo bar Xbase 

Pour modifier le fichier, utilisez l’option -i de sed:

 sed -i -r '2 s/([^ ]* ){3}/&X/' file 

Comment ça marche

Considérons la commande sed :

 2 s/([^ ]* ){3}/&X/ 

L’initial 2 indique à sed de n’appliquer cette commande qu’à la deuxième ligne.

Nous utilisons la commande s ou substitut . Cette commande a la forme s/old/new/ où old et new sont:

  • old est l’expression régulière ([^ ]* ){3} . Cela correspond à tout, y compris à la troisième occurrence de l’espace.

  • new est le texte de remplacement, &X L’esperluette se réfère à ce que nous avons comparé dans l’ old , qui est toute la ligne jusqu’à et y compris le troisième espace. Le X est le nouveau personnage que nous insérons.

Cela pourrait fonctionner pour vous (GNU sed):

 sed '2s/X/&Y/3' file 

Ceci insère Y après la troisième occurrence de X sur la deuxième ligne seulement.