[완료]sed 문의 드립니다.

dcmru의 이미지

sed 를 이용해서, 파일이름을 포함한 절대경로에서 파일이름만 빼고 경로만 얻고 싶습니다.

예로 /usr/src/test.tar 에서 /usr/src 만 빼내려고 합니다.

물론 파일이름과 경로는 다양합니다. ㅡㅡㅋ

라인의 끝에서 끝에서 처음으로 만나는 / 까지만 삭제하면 되는되요. 정규표현을 어떻게 해줘야할까요?

sed -e "s/\/*$/ /g" 이런식으로 해도 안먹는군요. 이해가 부족한가봅니다.

마찮가지로 /usr/src/test.tar 에서 파일이름만 빼낼려면, 어떻게 해야할까요?

무한포옹의 이미지

1. dirname "/local/usr/src/tmp/src.tar"
2. basename "/local/usr/src/tmp/src.tar"

-------------------------------
인생 뭐 있음!

kz의 이미지

dirname

find . -type f -exec dirname {} \; 해보세요.

dcmru의 이미지

답변감사드립니다.

dirname, basename 이라는 명령어가 있었군요. 유용할 것 같습니다.
그런데, 두 명령어가 없는 OS환경이라면, 치환명령어를 써야할것 같습니다.
다른 방법은 없을까요?
basename 은 awk 로 구분자를 / 로 준 다음에 마지막 인자를 출력하게 하는 방법으로 해결은 되었습니다.
sed 를 이용하는 방법은 어떻게 해야할까요?
-------------------------------------------------------
노력만이 살길이다.

Prentice의 이미지

vim이라면 (대충

vim이라면 (대충 적자면) \(첫째\)\(둘째\)를 검색해서 첫째를 \1로 출력하면 될 것 같습니다.

:%s/\(\/.*\/\)\(\).*/\1/

/local/usr/src/tmp/src.tar를 /local/usr/src/tmp/로 만들어줍니다.

dcmru의 이미지

답변 감사드립니다.

sed 에 답변주신 정규표현식을 적용하니 정상작동합니다.
그런데 정규표현식이 이해가 가질않네요. ^^;
사용법을 모르니 그런것 같습니다. 살펴봐야겠습니다.
-------------------------------------------------------
노력만이 살길이다.

Prentice의 이미지

그런데 제 코드에

그런데 제 코드에 군더더기가 있네요.

s
/                %매치 시작
    \(           %여기서 부터 기억
 
        \/       %슬래시로 시작해서
        .*       %중간에 글자가 오고
        \/       %슬래시로 끝나는 가장 긴 내용
    \)           %여기까지 기억
 
    .*           %여기는 마지막 슬래시 이후이므로 파일명
/                %매치 끝
    \1           %첫번째 기억을 불러옴
/

이런 식으로 해도 아마 되지 않을까 생각합니다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.