sed 명령에서 특수 문자의 목적은 무엇입니까? [폐쇄]

sed 명령에서 특수 문자의 목적은 무엇입니까? [폐쇄]

콘솔 창에서 디렉토리 트리를 생성하는 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/-/|/'

관련 정보