sed 명령을 사용하여 상위 폴더와 직접 하위 폴더를 일치시킵니다.

sed 명령을 사용하여 상위 폴더와 직접 하위 폴더를 일치시킵니다.

다음을 인쇄하는 Linux 명령이 있습니다.

folder/subfolder1/file1.txt
folder/subfolder2/file1.txt
folder/subfolder2/file2.txt
folder/subfolder3/sub-subfolder3/file1.txt

내 목표는 sed다음 결과를 인쇄하는 것입니다.

folder/subfolder1
folder/subfolder2
folder/subfolder2
folder/subfolder3

하지만 기본 폴더와 직접 하위 폴더만 유지할 수는 없고 파일 이름만 제거할 수 있습니다.

's/\(folder\/.*\)\(\/.*\)/\1/'

,인쇄

folder/subfolder1
folder/subfolder2
folder/subfolder2
folder/subfolder3/sub-subfolder3

답변1

IIUC, .보다 깊지 않은 경로만 인쇄하려고 합니다 subfolder. 이 경우 다음을 사용할 수 있습니다 cut.

your_command | cut -d/ -f1-2

또는 awk:

your_command | awk -v FS='/' '{print $1 "/" $2}'

답변2

다음 게임.*folder\/탐욕스럽게/, 두 번째 캡처 그룹에서 일치하는 마지막 항목만 남겨 둡니다 .

대신 다음 [^/]*을 사용하여 모든 것을 다음 구분 기호와 일치시킬 수 있습니다.

sed 's/\(folder\/[^/]*\)\(\/.*\)/\1/'

또는 (실제로 두 번째 세트를 사용하지 않기 때문에)

sed 's/\(folder\/[^/]*\)\/.*/\1/'

답변3

GNU sed를 사용하면 다음과 같이 수행할 수 있습니다.

your_command | sed -n 's|/|\n|2g;P'

또는 POSIX sed 편집기를 사용하여 필요한 데이터를 인쇄하는 경우. 모든 슬래시를 개행 문자로 변환한 다음 첫 번째 슬래시를 복원하고 첫 번째 개행 문자로 인쇄합니다.

your,_command |
sed -n '
  y/\//\n/
  s|\n|/|;P
' 

관련 정보