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.
Note: Je le fais sous Linux.
Avec awk :
1 foo bar base 2 foo bar base
awk 'NR==2{$2=$2"X"; print}' file
-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 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
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.