web-dev-qa-db-fra.com

awk + ligne d'impression uniquement si le premier champ commence par une chaîne comme Linux1

comment imprimer la ligne au cas où le premier champ commencerait avec Linux1

par exemple:

  echo Linux1_ver2  12542 kernel-update  |   awk '{if ($1 ~ Linux1 ) print $0;}'

l'objectif est d'imprimer la ligne, tandis que le premier champ commence par Linux1

exemple de lignes:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 

remarque - l'espace ou TAB pourrait être avant le premier dépôt

18
yael

Une manière:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
15
Guru

awk ignore les blancs de début lors de l'attribution des champs. La commande par défaut est print.

awk '$1 ~ /^Linux1/'

C'est ce que tu veux.

Explication détaillée:

  • $ 1 dit à awk de regarder la première "colonne".
  • ~ indique à awk de faire une correspondance RegularExpression /..../ est une expression régulière.
  • Dans le RE se trouve la chaîne Linux et le caractère spécial ^.
  • ^ fait correspondre le RE dès le début (par opposition à la correspondance n'importe où sur la ligne).

Vu ensemble: Awk correspondra à une expression régulière avec "Linux" au début de la première colonne.

22
Johan

Cela devrait fonctionner pour ce cas spécifique.

awk '/^[[:blank:]]*Linux1/ {print}'
2
Bernhard