Polecenie WC w systemie Linux


Poniżej znajduje się zawartość przechowywana w moim pliku
This is my Input

Tak więc za pomocą polecenia
wc -c
możemy uzyskać liczbę znaków przechowywanych w pliku.
Oczekiwany wynik dla powyższego pliku edytowany za pomocą

VIM

w Ubuntu,

jest równy

16. Ale
wc -c
zwraca
17
.
Dlaczego istnieje takie wyjście? Na końcu wiersza nie ma nawet powrotu karetki. Więc jaki jest 17 znak?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

oczywiście, że musiałeś wejść. może tego nie widzisz. rozważ te dwa przykłady:
echo -n "This is my Input" | wc -c
16

ponieważ -n służy do unikania pisania, ale

echo "This is my Input" | wc -c
17

spójrz na ten przykład, zobacz nową linię.
https://i.stack.imgur.com/Mqjlw.png

Jak mogę zobaczyć nową linię?
>
echo "This is my Input" | od -c

od zrzutu plików w formatach ósemkowych i innych

-c wybierz znak ASCII lub znak ucieczki odwrotnym ukośnikiem

A oto przykład dla pliku i użycia od
https://i.stack.imgur.com/r40mr.png
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W systemie Linux, kiedy


VIM
zapisuje bufory, kończy każdą linię dodając terminator nowej linii. zrzut szesnastkowy


edytowany plik VIM.
Możesz otworzyć plik i wpisać
:! Xxd
, aby go wyświetlić


zrzut szesnastkowy
lub bezpośrednio użyj polecenia
hexdump yourfile
.
0000000: 5468 6973 2069 7320 6d79 2049 6e70 7574 This is my Input
0000010: 0a .
~
~
~

Tam możesz zobaczyć, że plik został dodany
0a
na końcu pliku.
więc jeśli użyjesz
wc -c
, aby uzyskać numer tego pliku, który zwróci

17

który zawierał znak nowej linii.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Masz
17
z powodu znaku
/ 0
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

ciąg wejściowy, który wprowadzasz jako wejście, nie ma wejścia/nowej linii, ale echo przypisuje do niego wejście/znak nowej linii. I wc -c czyta wejście lub znak nowej linii z podanego polecenia echo.
na przykład
echo k | wc -c

zwraca 2, ponieważ 1 dla k i 1 dla nowej linii dodanej przez echo
aż do
echo -n k | wc -c

zwraca 1, ponieważ -n wyłącza znak nowej linii.
ale toaleta -c zawsze czyta znak nowej linii.
Możesz spróbować
printf k | wc -c

powrót 1
zobacz, co robi w pliku
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$

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się