[완료]"aaaa/bbbb/cccc/dddd"에서 "/"기준으로 끝을 제거하는 방법 좀 알려주세요.
글쓴이: Leo Park / 작성시간: 수, 2008/03/26 - 4:53오후
안녕하세요.
날씨가 많이 따뜻해졌습니다~
더위를 좋아하는 저는 얼른 더 더워졌으면...^^**
현재 csh을 이용해서 스크립트를 작성중인데요.
"aaaa/bbbb/cccc/dddd"에서 /를 기준으로 맨 끝의 값만 제거하고 싶습니다. 즉 "aaaa/bbbb/cccc"
awk를 이용해서 할려고 해 보았는데....맨 끝을 가져오는걸 어찌 해야하는지 모르겠습니다.
"aaaa/bbbb/cccc/dddd"가 경우에 따라서 갯수가 변하는게 문제입니다.
"aaaa"인 경우는 그냥 ""를,
"aaaa/bbbb"인 경우는 "aaaa"를,
"aaaa/bbbb/cccc"인 경우는 "aaaa/bbbb"를 추출하고 싶습니다.
echo "aaaa/bbbb/cccc/dddd" | awk -F"/" '{print $1,$2,$n-1}'
그냥 쉘로 해결해도 좋구, awk나 sed 혹은 다른 방법으로라도 해결할수 있는 방법 있으면 부탁드립니다.
그럼, 즐거운 하루되세요~
Forums:
basename 명령어가 어떨지..
파일 이름에서 디렉토리 부분을 제거하고 파일명만 보여주는 명령어인데..
각각 구분자가 '/'로 되어있으니..
효과가 있을 듯 합니다.
다만, aaaa/bbbb 와 aaaa/bbbb/ 에 대해서 bbbb 로 같은 결과를 냅니다.
Python
Python으로는 다음같이 하면 됩니다.
파이썬 다른 접근
다른 해법 두가지
echo "aaaa/bbbb/cccc/dddd" |
코드 설명하면.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
perl
echo aaaaa/bbbbbb/cccccc/dddddd | perl -ne 'print "$`\n" if /(\/[^\/]+$)/'
kldphjeon님, 김지훈님,
kldphjeon님, 김지훈님, Fe.head님, pcharley님~
답변 감사드립니다.
제가 질문을 중간에 수정해서...죄송합니다.
그래도 모두 저에게 많은 도움이 되는 내용들이라 감사드립니다.
아무래도 이번에는 pcharley님 알려주신 perl을 이용할 것 같습니다.
다시한번 답변주신 분들에게 감사드립니다.
즐거운 하루들 되세요~
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
방법이 많군요. 저도 추가.
sed 버젼
perl one-liner 버젼
d 문자가 d 문자가
d 문자가 d 문자가 아니라 임의의 문자였군요.
아래도 됩니다.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
저에게 이런 날도 있군요. ㅠㅠ
저에게도 이런 날이 오는군요. (ㅠㅠ.)
자매품
Hello World.
헛!!!! 지금 스크립트
헛!!!!
지금 스크립트 만들어서 돌리는데....
perl에서 변수명이 부정이라고 에러가 납니다...-_-;;
--------------------------------
set FD_NAME = `echo $D_NAME | perl -ne 'print "$`\n" if /(\/[^\/]+$)/'
--------------------------------
그냥 유닉스/리눅스상에서는 문제가 없는데....
스크립트로 만들어서 실행시키니까 문제가 됩니다.
위에서 알려주신
echo aaaa/bbbb/cccc/dddd | sed 's/\(.*\)\/\(.*\)$/\1/'
등의 sed로 하려고 하였는데...
echo aaaa | sed 's/\(.*\)\/\(.*\)$/\1/'
이런 경우는 null나왔으면 하는데 "aaaa"가 나옵니다.
그렇게 되면 "aaaa"와 "aaaa/bbbb"가 같은 값이 되므로 문제가 되어서요...
죄송하지만 sed나 awk로 하는 다른 방법 없을까요?
그냥 쉘 명령어로 하는 방법도 괜찮습니다.
그럼, 즐거운 저녁시간되세요.
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
아~ sed를 이용해서
아~
sed를 이용해서 해결하였습니다.
입력되는 문장(Path)의 앞에 "/"를 추가해서 해결했습니다.
도움 주신분들 다시한번 감사드립니다..^^**
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.
그냥 bash로 하시면 더 쉽게 가능합니다.
$ a='aaaa/bbbb/cccc/dddd'
$ b=${a$/*}
$ echo $b
basename, dirname 을 쓰는게 가장 쉽네요^^;
아까보니 awk의 $NF
아까보니 awk의 $NF 쓰는 답변이 있었는데 그 사이 질문이 바뀌었군요.
----
I paint objects as I think them, not as I see them.
atie's minipage
----
I paint objects as I think them, not as I see them.
atie's minipage
댓글 달기