问题
The following is the content stored in my file
This is my Input
So, using wc -c
command we can get the number of characters stored in the file.
My expected output for above file that edited by using VIM in Ubuntu is 16. But, wc -c
command returns 17
.
Why is the output like this? There isn't even a carriage return at end of line. So, what is the 17th character?
回答1:
of course you had enter. maybe you cant see it. consider these two examples:
echo -n "This is my Input" | wc -c
16
because -n is for avoiding enter but
echo "This is my Input" | wc -c
17
look at this example too see the new line.
How to see newline?
echo "This is my Input" | od -c
od dump files in octal and other formats
-c select ASCII characters or backslash escapes
And here is an example for file and usage of od
回答2:
In Linux, When VIM save buffers, it will terminate every line by appending line terminator of new line. The hex-dump of VIM edited file.
You can open your file and input :!xxd
to view hex-dump or directly use hexdump yourfile
command.
0000000: 5468 6973 2069 7320 6d79 2049 6e70 7574 This is my Input
0000010: 0a .
~
~
~
In there you can see, the file have appended 0a
in the end of file.
so when you use wc -c
to get the number of this file, it will return 17 that have included the new line symbol.
回答3:
You have 17
because of the /0
chaeracter.
回答4:
the input string you giving as input has no enter/new line, but echo is assigning enter/newline to it. And wc -c reads enter or newline from given by echo command.
for example
echo k | wc -c
returns 2 because 1 for k and 1 for new line appended by echo
while
echo -n k | wc -c
returns 1 because -n suppresses the newline.
but wc -c always reads newline.
You can try
printf k | wc -c
returns 1
see what It does in file
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$
来源:https://stackoverflow.com/questions/31584361/wc-command-in-linux