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