빈 줄을 세지 않고 CLI 셸에 코드 행이 몇 개 있는지 어떻게 알 수 있나요?
sh
이 질문의 목적은 두 쉘 과 Bash
CLI 쉘 모두에 대한 코드 행을 계산하는 방법을 배우는 것입니다 .
커널에 약 1,500만 행의 코드가 있다는 점을 감안할 때 커널과 인터페이스할 수 있게 해주는 이 두 프로그램의 코드 행 크기에 대해 궁금했습니다.
답변1
최신 버전의 경우세게 때리다, 즉 bash v4.4, 대답은 134576입니다. 내가 사용하는 명령은 다음과 같습니다.
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
.c
또는 로 끝나는 파일을 찾는다는 의미입니다 .h
( 소스 코드의 일부라고 생각하지만 파일은 계산하지 않음) .def
..po
in, grep -v '^\s*$'
(역사적 참고, [\s*] 형식을 \s*로 변경),
-v
해당 라인만 인쇄합니다.~ 아니다성냥^
라인 시작을 의미$
라인 끝을 의미\s
공백, 탭, 줄 바꿈을 포함한 공백을 의미합니다.
따라서 grep -v '^[\s]*$'
제외 줄에는 공백만 있고 wc -l
이를 계산합니다.
많이있다쉿UNIX v6용 소스 코드 sh(https://etsh.io/history/sh.c). 라인 수는 860개에 불과합니다.
답변2
내가 올바르게 이해했다면 당신의 친구는 wc 명령입니다.
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
또는 grep만 사용:
# grep -c . example
2
파일이 여러개 있는 경우. bash 소스 코드의 예입니다.
# wget -c https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
# tar xfvz bash-4.4.tar.gz
# grep -R -c . bash-4.4/ | awk -F : '{sum += $2} END {print sum}'