sed에서 괄호로 된 문자열을 제거하려고 하는데요..
sed를 사용하여 현재 디렉토리에 있는 파일이름중에서 괄호(소괄호, 중괄호, 대괄호)를 제거하려고 합니다
일단 소괄호, 중괄호 먼저 하려고...
ls | sed -e 's/\[.*\]//g'
이렇게 하니깐 '[' , ']' 들은 일단 잘 지워지는것 같아서 만족했습니다.
그리고 이제 '(' , ')'를 제거하려고 다름과 같이 사용했죠.
ls | sed -e 's/\(.*\)//g'
1. 그런데 왠일? 괄호를 이스케이프해야 된다고(묶어주면 안되니까) 생각해서 저렇게 사용했는데
글자들이 다 지워져서 보이더라고요.
문제는 위에서 이스케이프를 없애주면 제대로 괄호가 지워져서 정상적으로 잘 나오는것 같이 보이는데.
왜 이스케이프를 써주면 안되는 걸까요?
2. 1번에 끝에 나와있듯이 저 정규식이 이스케이프를 안해도 문제가 발생한다는건데...
왜냐하면 욕심많은? 탐욕적인? (책 번역이 이래서.. 마땅히 대체할 용어가 좀 그렇네요) 정량자(?) '*' 때문인데.
그래서 게으른(lazy)한 정량자인 *?를 사용해서 정규식을 작성하려고
ls | sed -e 's/\(.*?\)//g'
하면 아예 정규식이 작동안하더군요 (원래 파일이름 이 나오는...) sed에선 아예 "*?"은 지원을 안하는건가요?
아니면 이것을 대체할만한게 무엇이 있을까요?
궁금합니다...
ps; 아 작성하면서 생각났는데... 문자가 1개일경우에는 그냥 검색하는것과 같지 않나요
's/a/b/g' 랑 's/[a]/b/g'와 같은거 맞죠? '[', ']' 는 괄호안에있는건 OR연산이니까 1개만 있으면.. 같다고 볼수 있는 그런...
... 자기전에 작성한거라 지금보니깐 참 질문이 산만하네요 ㅜ
일단, 질문이.. 좀
일단, 질문이.. 좀 이상하네요.
괄호 문자를 지우는 것이 목적인가요, 아니면 괄호 문자 포함, 둘러싸인 내용까지 지우는 것이 목적인가요?
그리고 "\( ... \)"는 regular expression에서 group을 만드는 용도로 씁니다. "(", ")" 등의 문자를 나타내려면 그냥 "(", ")"를 쓰면 됩니다.
단순히 parenthese인 '(', ')'와, bracket인 '[', ']'를 제거하고 싶다면:
를 쓰세요.
sed에서 쓰이는 regular expression에 대한 것은
를 보면 잘 나와 있습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
괄호와 괄호안의
괄호와 괄호안의 모든 문자를 지우려고 했었어요.
---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!
$ echo 'q(w)e[r]t' | sed -e
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기