Commandes de base des expressions régulières

   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.


Je suppose que tu aimes

Origine blog.51cto.com/superleedo/2551502
conseillé
Classement