Ce qui suit est le contenu stocké dans mon fichier
This is my Input
Donc, en utilisant la commande wc -c, nous pouvons obtenir le nombre de caractères stockés dans le fichier.
Mon résultat attendu pour le fichier ci-dessus qui a été modifié à l'aide deVIMin Ubuntu est égal à 16. Toutefois, la commande wc -c renvoie 17.
Pourquoi la sortie est-elle comme ça? Il n'y a même pas de retour de voiture en fin de ligne. Alors, quel est le 17ème caractère?
bien sur vous aviez entrer. peut-être que vous ne pouvez pas le voir. considérons ces deux exemples:
echo -n "This is my Input" | wc -c
16
parce que -n est pour éviter d'entrer mais
echo "This is my Input" | wc -c
17
regardez cet exemple aussi voir la nouvelle ligne.
echo "This is my Input" | od -c
od dump files en octal et autres formats
- c sélectionnez ASCII caractères ou des barres obliques inverses
Vous avez 17 à cause du caractère '/ 0'.
Sous Linux, lorsqueVIMsave buffers, il mettra fin à chaque ligne en ajoutant le fin de ligne de la nouvelle ligne. Le vidage hexadécimal deVIMfichier modifié.
Vous pouvez ouvrir votre fichier et saisir :!xxd
pour afficher hex-dump ou utiliser directement la commande hexdump yourfile
.
0000000: 5468 6973 2069 7320 6d79 2049 6e70 7574 This is my Input
0000010: 0a .
~
~
~
Vous pouvez voir ici que le fichier a ajouté 0a
à la fin du fichier.
ainsi, lorsque vous utilisez wc -c
pour obtenir le numéro de ce fichier, il renverra 17 qui contient le nouveau symbole de ligne.
la chaîne d'entrée que vous donnez comme entrée n'a pas d'entrée/nouvelle ligne, mais echo lui attribue entrée/nouvelle ligne. Et wc -c lit enter ou newline à partir de la commande echo.
par exemple
echo k | wc -c
retourne 2 parce que 1 pour k et 1 pour la nouvelle ligne ajoutée par echo
tandis que
echo -n k | wc -c
renvoie 1 car -n supprime la nouvelle ligne.
mais wc -c lit toujours les nouvelles lignes.
Tu peux essayer
printf k | wc -c
renvoie 1
voir ce qu'il fait dans le fichier
bash-4.1$ echo 1234 > newfile
bash-4.1$ cat newfile
1234
bash-4.1$ cat -e newfile
1234$
bash-4.1$ printf 1234 > newfile
bash-4.1$ cat newfile
1234bash-4.1$ cat -e newfile
1234bash-4.1$