J'ai
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
J'ai besoin de awk pour imprimer toutes les lignes dans lesquelles $2
est LINUX
.
Dans awk
:
awk '$2 == "LINUX" { print $0 }' test.txt
Voir awk
par exemple pour une bonne introduction à awk
.
Dans sed
:
sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt
Voir sed
par exemple pour une bonne introduction à sed
.
Voici un cas dans lequel vous pouvez utiliser la belle idiomatique awk
:
awk '$2=="LINUX"' file
C'est:
awk
en condition True est d'imprimer la ligne courante.$2 == "LINUX"
Est vrai chaque fois que le deuxième champ est LINUX, cela imprimera les lignes dans lesquelles cela se produit.Dans le cas où vous souhaitez imprimer toutes ces lignes correspondant à LINUX
peu importe si elles sont en majuscules ou en minuscules, utilisez toupper()
pour toutes les mettre en majuscule:
awk 'toupper($2)=="LINUX"' file
Ou IGNORECASE
avec l'une de ces syntaxes:
awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file
Essayez-les:
egrep -i '^\w+ LINUX ' myfile
awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile
sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile
modifier: modifié pour l'insensibilité à la casse
Dans GNU sed
les correspondances insensibles à la casse peuvent être faites en utilisant le modificateur I
:
sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'
Correspondra de manière robuste à "linux", "Linux", "LINUX", "LiNuX" et d'autres comme deuxième champ (après le premier champ qui peut être n'importe lequel caractère non blanc) et entouré de n'importe quelle quantité (au moins un) de n'importe quel espace (principalement espace et tabulation, bien que vous puissiez utiliser [:blank:]
pour le limiter strictement à ceux-ci).