콘솔 창에서 디렉토리 트리를 생성하는 bash 명령을 찾았습니다. 매우 유용하다고 생각하지만 모든 특수 문자가 어떻게 작동하는지 잘 이해하지 못합니다. 누군가 내가 그것을 깨도록 도와 줄 수 있습니까?
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
처음 두 가지는 이해하기 매우 쉽습니다. bash에서 별칭을 만들고 현재 디렉터리의 파일과 폴더를 반복적으로 나열하는 것입니다.
1. alias tree=""
2. ls -R
그러나 그 후 나는 거의 길을 잃었습니다. 나는 그것이 grep과 sed를 통해 나머지 명령을 파이프한다는 것을 알고 있지만 나머지 명령이나 수정자의 이름조차 이해하지 못합니다.
답변1
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
ls -R
: 하위 디렉터리를 재귀적으로 나열합니다.grep ":$"
: grep은:
다음으로 끝나는 줄 에서만 작동합니다.sed -e 's/:$//'
::
줄 끝 삭제-e 's/[^-][^\/]*\//--/g'
: 마지막 디렉터리를 제외한 모든 경로 구성 요소를 로 바꿉니다--
. 특히 0번 이상 반복되는 문자를 제외한 모든 문자와 뒤에-
오는 문자를 대체합니다 ./
/
-e 's/^/ /'
: 줄 시작 부분에 공백 3개 추가-e 's/-/|/'
: 먼저 다음-
으로 교체|
이 코드 조각에는 명령 구문 분석부터 시작하여 많은 "문제"가 있지만 ls
이를 제쳐두고 sed
보다 간결한 방식으로 부분을 다시 작성할 수 있습니다.
ls -R | grep ":$" | sed -e 's/:$//;s/[^-][^\/]*\//--/g;s/^/ /;s/-/|/'