GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment remplacer toutes les chaînes dans un fichier commençant par un préfixe ?

Exemple :

1:20 2:25 3:0.432 2:-17 10:12

Je veux remplacer toutes les chaînes qui commencent avec 2: à 2:0 .

Sortie :

1:20 2:0 3:0.432 2:0 10:12

Réponse acceptée :

Utilisation de sed :

sed -E 's/((^| )2:)[^ ]*/\10/g' in > out

Aussi, comme inspiré par la réponse de souravc, s'il n'y a pas une chance d'avoir 2: sous-chaîne après le début d'une chaîne not contenant un 2: sous-chaîne (par exemple, il n'y a pas une chance d'un 1:202:25 chaîne, que la commande raccourcie suivante remplacerait par 1:202:0 ), la commande peut être raccourcie à ceci :

sed -E 's/2:[^ ]*/2:0/g' in > out

Répartition des commandes n°1/n°2 :

  • -E :rend sed interpréter le modèle comme un modèle ERE (Extended Regular Expression) ;
  • > out :redirige stdout pour out;

sed répartition de la commande #1 :

  • s :affirme pour effectuer une substitution
  • / :démarre le motif
  • ( :démarre le groupe de capture
  • ( :commence à regrouper les chaînes autorisées
  • ^ :correspond au début de la ligne
  • | :sépare la deuxième chaîne autorisée
  • :correspond à un personnage
  • ) :arrête de regrouper les chaînes autorisées
  • 2 :correspond à un 2 personnage
  • : :correspond à un : personnage
  • ) :arrête le groupe de capture
  • [^ ]* :correspond à n'importe quel nombre de caractères non
  • / :arrête le motif / démarre la chaîne de remplacement
  • \1 :référence arrière remplacée par le premier groupe de capture
  • :ajoute un personnage
  • / :arrête la chaîne de remplacement / démarre les drapeaux du motif
  • g :affirme effectuer la substitution globalement, c'est-à-dire substituer chaque occurrence du motif dans la ligne

sed répartition de la commande #2 :

  • s :affirme pour effectuer une substitution
  • / :démarre le motif
  • 2 :correspond à un 2 personnage
  • : :correspond à un : personnage
  • [^ ]* :correspond à n'importe quel nombre de caractères non
  • / :arrête le motif / démarre la chaîne de remplacement
  • 2:0 :ajoute un 2:0 chaîne
  • / :arrête la chaîne de remplacement / démarre les drapeaux du motif
  • g :affirme effectuer la substitution globalement, c'est-à-dire substituer chaque occurrence du motif dans la ligne

Ubuntu
  1. Remplacer la nouvelle ligne par Nul ?

  2. Comment générer un fichier et ignorer les lignes commençant par "?" ?

  3. Comment remplacer Grub par Burg ?

  4. Comment ouvrir un fichier .8 avec Man ?

  5. Comment construire un module de noyau Linux pour qu'il soit compatible avec toutes les versions du noyau ?

Comment gérer les fichiers avec Scilab sur Ubuntu 15.04

Comment lire un fichier avec des espaces sous Linux

Comment exécuter les commandes de fichier .sh tout en une fois sous Linux

Comment remplacer les espaces dans les noms de fichiers par des traits de soulignement sur le shell Linux

Comment obtenir le lien du fichier à télécharger avec Wget ?

commande tr - comment remplacer la chaîne \n par une nouvelle ligne réelle (\n)