Quelle est la différence entre cat -b et cat -n et comment chat -s fonctionne

Je développe actuellement une commande de chat en C et Unix. Ma tâche est de concevoir les commandes cat -b et cat -s cette fois. Cependant, j’ai déjà créé d’autres commandes telles que -t, -v, -n, -e. Je suis resté bloqué à la commande -b car chaque fois que je déclenche la commande, il retourne la même sortie que -n retourne.

par exemple

cat -n hello.c 1 #include 2 int main() { 3 printf("hello"); 4 return 0; 5 } cat -b hello.c 1 #include 2 int main() { 3 printf("hello"); 4 return 0; 5 } 

Ma deuxième question est de savoir comment le chat fonctionne? comme j’ai à nouveau tiré la commande mais la sortie affiche un simple fichier c sans aucune modification.

par exemple

 cat -s hello.c #include int main() { printf("hello"); return 0; } 

Merci d’avance et pour votre temps.

Commençons par un simple fichier de six lignes appelé qq.in , avec deux lignes non vides, deux lignes vides et deux autres non vides:

 a b c d 

La différence entre cat -n et cat -b est que la première numérotera toutes les lignes tandis que la seconde numérotera uniquement les lignes non vides:

 $ cat -n qq.in $ cat -b qq.in 1 a 1 a 2 b 2 b 3 4 5 c 3 c 6 d 4 d 

En revanche, cat -s réduira les lignes vides consécutives en une seule ligne vide, comme indiqué ci-dessous (combiné avec -n , l’effet est évident):

 $ cat -ns qq.in 1 a 2 b 3 4 c 5 d 

Notez que les lignes doivent être vraiment vides, ces indicateurs ne feront pas ce que vous attendez si les lignes contiennent un espace ou un autre espace. Si vous voulez traiter les lignes en blanc comme vides, vous pouvez les filtrer d’abord avec quelque chose comme:

 sed -E 's/^\s+$//' qq.in | cat -b 

Question:

Quelle est la différence entre cat -b et can -n et comment cat -s fonctionne

De la sortie de l’ man cat :

  -b, --number-nonblank number nonempty output lines, overrides -n -n, --number number all output lines -s, --squeeze-blank suppress repeated empty output lines 

Lorsque vous utilisez cat -b , les lignes vides ne seront pas numérotées.

Voici ce que je vois avec un fichier simple:

cat -b socc.cc

      1 #include 

      2 int main ()
      3 {
      4 retourne 0;
      5}


cat -n socc.cc

      1 #include 
      2  
      3 int main ()
      4 {
      5 retourne 0;
      6}
      7  
      8  

cat -s socc.cc

 #comprendre 

 int main()
 {
    retourne 0;
 }

  -b, --number-nonblank number nonblank output lines -n, --number number all output lines 

ref: page de manuel du chat

et la seconde question, depuis la page de manuel:

-s, –squeeze-blank

  never more than one single blank line 

vous pouvez implémenter cette fonctionnalité comme ça

  1. lire le fichier dans un tampon
  2. vérifier si le tampon contient des lignes vides continues, par exemple “\ n \ n \ n”
  3. mettez-les ensemble, n’utilisez qu’un “\ n” au lieu d’un ensemble