1
votes

Chat les X derniers caractères sur la 14e ligne d'un fichier

J'ai un fichier avec une ligne qui a VERSION: X.X.X

Je veux retourner sur la console juste la partie X.X.X de la ligne. Premièrement, je dois obtenir la ligne que je fais avec

sed -n 14p filename.txt

Je suis juste un peu perdu quant à la façon dont je procéderais pour renvoyer uniquement les 5 derniers caractères de la ligne plutôt que la ligne complète.


1 commentaires

Pourquoi ne pas obtenir la troisième «colonne»? awk '{print $ 3}' Je vous demande pourquoi le sed est préféré.


3 Réponses :


1
votes

Ma première pensée:

  1. Inverser la ligne
  2. couper les X derniers / premiers caractères
  3. Inversez la ligne.

sed 's/.*\(.\{5\}\)$/\1/'

Mais avec sed vous pouvez remplacer:

rev | cut -c-5 | rev

p>


0 commentaires

0
votes

Vous pouvez utiliser

sed -n '14 s/VERSION *: *//p' file

Voir la démo sed en ligne p>

Avec s / VERSION *: * // , vous supprimerez simplement la VERSION , 0 ou plusieurs espaces, : , 0 espace ou plus.


0 commentaires

4
votes

Pourriez-vous essayer de suivre.

VERSION : X    .   X   .   X
          ^    ^   ^   ^   ^
          |    |   |   |   |
          -4  -3  -2   -1  Last character/letter of this line(so this becomes 1 character out of 5.
That's why we need to mention -4 in length($0)-4 so that it takes value till last character).

Brève explication: Recherche d'une ligne contenant la chaîne VERSION code > puis en utilisant subtr pour imprimer la sous-chaîne, de la longueur 4 jusqu'au dernier caractère de la ligne.

Sur la question de OP pourquoi nous devons écrire dans le code length ($ 0) -4 NOT length($0)-5: Permet de le comprendre de la manière suivante:

awk '/VERSION/{print substr($0,length($0)-4)}' Input_file


2 commentaires

@ Shox2711, Non, ce sera -4 seulement voir la sortie sera X.X.X comme suit cela fonctionne très bien.


@ Shox2711, j'ai également ajouté une explication dans ma solution pour substr .