sed 명령어
글쓴이: 전민 / 작성시간: 금, 2009/04/17 - 5:11오후
아래 명령어 해석 해주십시오.
[~]echo "1234 -a aa a -b bb -c cc -d dd" | sed "s/.*-a \([^-]\+\) -.*/\1/"
결과 : aa a
.*-a 는 -a 이전의 모든 문자열을 뜻하는 건 알겠습니다.
실행시키기 전에 결과를 예측할 때는 -b bb 가 나올 줄 알았는데 아니더군요.
이렇게 예측한 이유는 .*-a 이후에 ([^-]+) 즉 -로 시작하는 단어를 1에 저장, -.*는 그 다음 - 인 -c 이후의 모든 문자, 이렇게 해석했습니다.
테스트 겸해서
echo "1234 -a aa a =b bb -c cc -d dd" | sed "s/.*-a \([^=]\+\) -.*/\1/" 를 실행하니
1234 -a aa a =b bb -c cc -d dd
이렇게 나오는 군요.. 이건 또 왜 이렇게 나오죠?
echo "1234 -a aa a -b bb -c cc -d dd" | sed "s/.*-a \([^-]\) -.*/\1/" 이렇게 '+'를 빼도 1234 -a aa a -b bb -c cc -d dd
이렇게 나옵니다.
그럼 부탁드립니다
Forums:
[^-] 은 - 를 제외한 다른 한 글자와 매칭합니다
[^-] 은 - 를 제외한 다른 한 글자와 매칭합니다
.
.
.
.
.
-a \([^-]\+\) - 가
-a aa a - 와 매치되고
([^-]+) 부분이 aa a 가 되니까
aa a 가 나오는 거죠
http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/x10468.html
그런데 숙제가 아닌가 의심이 되네요 ....
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
휴.. 학교 졸업했습니다..
숙제라는 오해를...
다른 shell script를 분석하다가 위 명령을 봤는데..
[^-]가 '-'가 아닌 모든 문자를 나타내는 건가요?
이 부분을 몰라서 헤맸습니다.
답변 감사합니다.
해당 내용은
해당 내용은 쉘스크립트 자체에 대한 것이 아니라 정규표현식(regular expression)에 대한 내용입니다.
댓글 달기