Les connaissances de base de l'expression régulière ont été discutées dans la section précédente, et les trois commandes clés de l'expression régulière sont grep, sed et awk.
1) grep est utilisé pour filtrer les informations de ligne
Fonction: recherchez et imprimez la ligne qui correspond au mot-clé
Paramètres: -n affiche les lignes et les numéros de ligne correspondants ensemble; -v les lignes d'impression qui ne répondent pas aux exigences (inversées); -i ne sont pas sensibles à la casse; -w imprime des lignes de mots complets; -Une lignes d'impression qui répondent aux exigences et N lignes inférieures; -Bn imprime les lignes requises et les n lignes supérieures; -Cn imprime les lignes requises et les n lignes supérieures et inférieures.
[centos7 la racine @ ~] # grep -A2 / le mot de passe 'halt' / etc # arrête la ligne contenant les deux lignes suivantes et
renvoie [la racine centos7 @ ~] # grep -B2 'halt' / etc / le mot de passe # comprend le La ligne d'arrêt et les deux lignes au-dessus sont
affichées [root @ centos7 ~] # grep -C2'halt '/ etc / passwd
#Output la ligne contenant halt et les deux lignes au-dessus et en dessous [root @ centos7 ~] # grep -n 'root' / etc / passwd
#Filtre les lignes et les numéros de ligne avec le mot-clé racine [root @ centos7 ~] # grep -v'nologin '/ etc / passwd
#Filtre les lignes sans nologin [root @ centos7 ~ ] # grep '[0-9]' / etc / inittab
#Filtre toutes les lignes qui contiennent des nombres [root @ centos7 ~] # grep -v '[0-9]' / etc / inittab #Filtre toutes les lignes qui ne contiennent pas de nombres La ligne
[root @ centos7 ~] # grep -v '^ #'/ etc / inittab
#Filtre les lignes commençant par non # [root @ centos7 ~] # grep'game $ '/ etc / inittab
#Filtre les lignes se terminant par game [root @ centos7 ~] # grep -v' ^ # '/ etc / crontab | grep -v '^ $' #Supprimer toutes les lignes vides et les lignes commençant par #
2) sed est utilisé pour filtrer et remplacer le texte de ligne
Sed est un éditeur en ligne qui traite le contenu du texte une ligne à la fois. Lors du traitement, stockez la ligne actuellement traitée dans un tampon temporaire, puis utilisez la commande sed pour traiter le contenu du tampon, et une fois le traitement terminé, envoyez le contenu du tampon à l'écran. Traitez ensuite la ligne suivante et répétez de cette façon jusqu'à la fin du fichier.
Rôle: filtrer la requête et modifier le contenu du texte de remplacement
Paramètres: -n Seule la ligne (ou action) qui a subi un traitement spécial par sed sera répertoriée; -e édite directement les actions sed en mode ligne de commande; -f écrit directement les actions sed dans un fichier; - L'action de r sed prend en charge la syntaxe de la notation régulière étendue; -i modifie directement le contenu du fichier lu sans sortie vers le terminal. a est ajouté, après que a peut être suivi de chaînes, et ces chaînes apparaîtront sur une nouvelle ligne (la ligne suivante actuelle); c remplacé, après que c peut être suivi de chaînes, ces chaînes peuvent remplacer entre n1 et n2 La ligne de d est supprimée, car elle est supprimée, il n'y a donc généralement pas de contenu après d; i est inséré et modifié, et les chaînes peuvent être connectées après i, et ces chaînes seront une nouvelle ligne; p est imprimé, et une certaine sélection Sortie de données de s; s remplacer et remplacer, remplacer directement; g sélectionner tout le contenu.
Supprimer: d commande
[root @ centos7 ~] # sed '2d' app.txt #Supprimer la deuxième ligne du fichier
[root @ centos7 ~] # sed '2, $ d' app.txt #Supprimer la deuxième ligne du fichier dans Toutes les lignes à la fin
[root @ centos7 ~] # sed '$ d' app.txt #Supprimer la dernière ligne du fichier
[root @ centos7 ~] # sed '/ test /' d app.txt #Supprimer toutes les lignes qui contiennent test et
remplacer : s commande
[centos7 la racine @ ~] # Sed 'S / test / Prod / g' app.txt # fichier remplace tous les tests prod, puis pas de remplacement g chaque ligne a
[centos7 la racine @ ~] # Sed - n's / ^ test / prod / p 'app.txt # La ligne commençant par test, remplacez test par prod et
affichez [root @ centos7 ~] # sed -n's / \ (love \) able / \ 1rs / p 'app.txt #Tous les adorables seront remplacés par les amoureux
[root @ centos7 ~] # sed's # vous # votre # g 'app.txt # "#" est le séparateur ici, au lieu de "/" par défaut
Plage de lignes sélectionnée: virgule
[root @ centos7 ~] # sed -n '/ test /, / chart / p' app.txt # affiche toutes les lignes de la plage de test et cheart
[root @ centos7 ~] # sed -n '6, / ^ test / p' app.txt #Output toutes les lignes de la ligne 6 à la ligne commençant par test
[root @ centos7 ~] # sed '/ test /, / chart / s / $ / test /'app.txt #La ligne entre test et west, ajoutez test à la fin
Edition multipoint : e commande [root @ centos7 ~] # sed -e '1,5d' -e's / test / dev / 'app.txt #Supprimer les lignes 1 à 5 et remplacer test par dev
Lisez le fichier: r commande
[root @ centos7 ~] # sed '/ test / r 1.txt' app.txt #Match la ligne de test, insérez le contenu 1.txt dans la ligne et sortez-le ensemble
Ecrire le fichier: w commande
[root @ centos7 ~] # sed -n '/ test / w 1.txt' app.txt #Toutes les lignes contenant test dans app.txt sont écrites en 1.txt
Ajouter une commande: une commande
[root @ centos7 ~] # sed '/ ^ test / a \\ ---> ceci est app.txt' app.txt <# Le contenu est ajouté à la fin de la ligne commençant par test
Insérer la modification: commande i
[root @ centos7 ~] # sed '2i love you' app.txt #Insert love you in line 2
[root @ centos7 ~] # sed -i's / \ $ / \! / G ' app.txt #Remplacez le $ à la fin de la ligne par!
3) filtre awk modifier le texte
Awk est un éditeur de flux comme sed. Il fonctionne également sur les lignes d'un document et traite le texte ligne par ligne. Awk est plus puissant que sed, il peut faire ce que sed peut faire, et il peut aussi faire des régularités plus complexes.
1 awk command form
awk [-F | -f | -v] 'BEGIN {} // {command1; command2} END {}' file
[-F | -f | -v] Grand paramètre, -F spécifie le séparateur, -f appelle le script, -v définit la variable var = value
'' # quote code block
BEGIN #initialize the code block, principalement refer to global variables, set the FS separator
// # matching code block, it can be a string or regular expression
{ } # Bloc de code de commande, contenant une ou plusieurs commandes
; # Plusieurs commandes sont séparées par des points-virgules
END # Bloc de code de fin, principalement pour le calcul final ou les informations de synthèse de sortie
2 Caractère variable spécial
$ 0 # Représente la ligne courante entière
$ 1 # Le premier champ de chaque ligne
NF # Variable de quantité de champ
NR # Le numéro d'enregistrement de chaque ligne, incrément d'enregistrement multi-fichier
FNR # Similaire à NR, l'enregistrement multi-fichier ne s'incrémente pas, chaque fichier Tout commence à 1
\ t # Caractère de tabulation
\ n # Caractère de nouvelle ligne
FS # Définit le séparateur lorsque BEGIN
RS # Entrez le séparateur d'enregistrement, la valeur par défaut est le caractère de nouvelle ligne
~ # Correspond, pas une comparaison exacte par rapport à ==
! ~ # Ne correspond pas , Comparaison inexacte
== # Egal, doivent tous être égaux, comparaison exacte
! = # Différent, comparaison exacte
&& # Logique ET
|| # Logique OU
+ # Lorsqu'il est mis en correspondance, cela signifie 1 ou plus
/ [0-9] [ 0-9] + / # Deux chiffres ou plus
/ [0-9] [0-9] * / # Un ou plusieurs chiffres
OFS # Séparateur de champ de sortie, la valeur par défaut est également un espace
ORS # Séparateur d'enregistrement de sortie, La valeur par défaut est une nouvelle ligne
-F '[: # /]' # Définit trois séparateurs
Exemple 3 awk
= Etc. Il convient de noter que lors de la comparaison de nombres avec des guillemets doubles, awk ne le considérera pas comme un nombre, mais comme un caractère. Sans les guillemets doubles, il sera considéré comme un nombre. [root @ centos7 ~] #
awk -F ':' '$ 3 == "0"' / etc / passwd
#Match la ligne avec le caractère 0 dans le troisième champ [root @ centos7 ~] # awk -F ':' '$ 3> = 500' / etc / passwd
#Match la ligne où le troisième champ est supérieur au nombre 500 [root @ centos7 ~] # awk -F ':' '$ 7! = "/ sbin / nologin"' / etc / passwd #Match le septième champ n'est pas nologin La ligne
[root @ centos7 ~] # awk -F ':' '$ 3 <$ 4' / etc / passwd
# Comparaison logique entre deux segments [root @ centos7 ~] # awk -F ':' '$ 3> " 5 "&& $ 3 <" 7 "'/ etc / passwd
#Lignes qui satisfont deux conditions de correspondance en même temps [root @ centos7 ~] # awk -F': '' $ 3>" 5 "|| $ 7 ==" / bin / frapper"'/ etc / passwd # La ligne qui remplit l'une des conditions
couramment utilisées variable
NF: combien de paragraphes sont séparés par un séparateur, combien de paragraphes NF est, et $ NF est la valeur du dernier paragraphe
NR: numéro de ligne numéro de ligne
[racine @ centos7 ~ ] # head -n3 / etc / passwd | awk -F ':' '{print NF}'
#Output le nombre total de paragraphes [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print $ NF}'
#Output la valeur du dernier paragraphe [root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '{print NR}'
#Output line number [root @ centos7 ~] # awk'NR > 20 '/ etc / passwd
#Utilise la ligne numéro 20 comme condition de jugement [root @ centos7 ~] # awk -F ':' 'NR> 20 && $ 1 ~ / ssh /' / etc / passwd # Les lignes de sortie avec NR supérieur à 20 et ssh dans le premier paragraphe
modifient la valeur du champ calculé
[root @ centos7 ~] # head -n3 / etc / passwd | awk -F ':' '$ 1 = "root"'
#Le premier paragraphe des trois premières lignes est modifié en sortie racine [root @ centos7 ~] # head -n2 / etc / passwd | awk -F ':' ' {7 $ = 3 $ + 4 $; imprimer 7 $} '
#Calculer les champs et attribuer des valeurs [root @ centos7 ~] # awk -F ':' '{(t = t + $ 3)}; END {print t}' / etc / passwd # $
3Field count et [root @ centos7 ~] # awk -F ':' '{if ($ 1 == "root") affiche $ 0}' / etc / passwd # affiche la ligne où $ 1 est root
Le contenu de cette section est tous basiques. Les exemples de commandes ci-dessus peuvent satisfaire une utilisation quotidienne. Si vous voulez des fonctions plus complexes et plus puissantes, vous pouvez consulter le site officiel de l'outil de commande. Surtout, il existe des livres professionnels présentant cet outil de commande. La connaissance des commandes est la condition préalable à l'écriture de scripts. Avant d'écrire un script, vous devez d'abord comprendre les résultats d'exécution de chaque commande, coopérer avec l'instruction de la boucle de jugement et réaliser les fonctions de traitement complexes par lots.