모든파일의 일치하는 문자만 치환하는 방법
글쓴이: hermian / 작성시간: 목, 2003/01/23 - 9:36오전
보통 문자열 치환의 방법은 많이 나와 있습니다만
file에
kkk
kkkk
kkkkkk
kkkkkkkkkk
...
가 있을 경우 정확히 kkk만 jjj로 치환하는 방법을 알고 싶습니다.
즉 첫째줄은 바뀌어도 나머지는 바뀌지 않아야 합니다.
그것도 모든 하위 디렉토리에 대해서요.
vi로 일일이 열어서 할려고 하니 너무 힘드네요. :(
여러 고수님들의 조언 부탁드립니다.
Forums:
find 와 sed 를 이용하시면 될 것 같습니다.kldp 문서에 잘
find 와 sed 를 이용하시면 될 것 같습니다.
kldp 문서에 잘 설명되어 있을 겁니다.
Orion Project : http://orionids.org
find . -exec perl -pi -e 's/바뀌고/바뀔/g' {}
find . -exec perl -pi -e 's/바뀌고/바뀔/g' {} \;
What do you want to eat?
find . -type f -exec perl -pi -e 's/^kkk
find . -type f -exec perl -pi -e 's/^kkk$/jjj/' {} \;
^kkk$ : 줄 처음과 끝 사이에 kkk만 있어야 한다는 뜻입니다.
[/]ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y
아무리 잘 올린다고 해도 결국은 제가 바라는 답이 아니네요.답변해 주
아무리 잘 올린다고 해도 결국은 제가 바라는 답이 아니네요.
답변해 주신 여러분들 감사합니다.
제가 원하는 것은 vim에서 :%s/\<우정\>/사랑/g 와 같은 효과를 바랍니다.
즉 "우정, 우정은, 우정을 "과 같은 문자가 여러 file에 산재해 있다면 "우정"이라는 첫단어만 바꾸길 원합니다.
답변주신 분들의 방법으로 하면 모두 다 바뀌거든요.
질문을 애매하게 한 제 잘못 입니다. ^^;;
다른 방법이 있으신분의 고견을 바랍니다.
[quote="hermian"]제가 원하는 것은 vim에서 :%s/\&l
?
줄 단위라면 ^어쩌구$로 하면 충분합니다. vim에서 되면 perl에서도 충분히 됩니다.
ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y
[quote]vim에서 :%s/\<우정\>/사랑/g[/quot
vi에서도 뒤에 g가 붙어있으면 전부 치환됩니다.
한 파일에서 1개 단어만 치환되게 하려면 윗분들의 예 중에서 g를 제외하면 됩니다.
find . -type f -exec perl -pi -e 's/[^a-
find . -type f -exec perl -pi -e 's/[^a-z]kkk[^a-z]/jjj/' {} \;
이러면 될것 같은데요.
한글일 때는 안될것 같군요-_-;; 퍽*
펄 정규표현식을 쓴다면...
펄 정규표현식중에 단어의 경계를 나타내는게 \b 가 있으니까...
find . -type f -exec perl -pi -e 's/\b우정\b/사랑/' {} \;
과 같이 하는 방법이 좋을 것 같은데요?
영어와 숫자만을 사용한다면 \W 를 이용하는 방법도 있을 것 같구요. :D
Re: 모든파일의 일치하는 문자만 치환하는 방법
해결책 1번
vi에서 ex모드를 사용합니다.
ex모드는 kldp.org 나 웹에서 검색해보십시오.
해결책 2번
정규표현식을 사용한다.
일치제한자, 그룹 매칭등 (한글이 어렵습니다 딴지 걸릴까바 무섭습니다-_-)
같을 것을 사용한다.
perl -pi -e "s/([^k])kkk([^k])/\1ttt\2/" filename
그룹1번 ([^k]) k가 아닌 한문자를 매칭하는 패턴
그룹 2번 1번과 같음
그룹1kkk그룹2 가 매칭하는것을 그룹1과 ttt 그룹2로 치환
해결책 3번
정규표현식을 버린다.
정규식을 제외한 간단한 프로그램으로 해결한다.
------------------------------------------------------------------------------------------------
Life is in 다즐링
댓글 달기