모든파일의 일치하는 문자만 치환하는 방법

hermian의 이미지

보통 문자열 치환의 방법은 많이 나와 있습니다만
file에
kkk
kkkk
kkkkkk
kkkkkkkkkk
...

가 있을 경우 정확히 kkk만 jjj로 치환하는 방법을 알고 싶습니다.
즉 첫째줄은 바뀌어도 나머지는 바뀌지 않아야 합니다.
그것도 모든 하위 디렉토리에 대해서요.
vi로 일일이 열어서 할려고 하니 너무 힘드네요. :(
여러 고수님들의 조언 부탁드립니다.

체스맨의 이미지

find 와 sed 를 이용하시면 될 것 같습니다.
kldp 문서에 잘 설명되어 있을 겁니다.

Orion Project : http://orionids.org

whitekid의 이미지

find . -exec perl -pi -e 's/바뀌고/바뀔/g' {} \;

What do you want to eat?

McKabi의 이미지

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

hermian의 이미지

아무리 잘 올린다고 해도 결국은 제가 바라는 답이 아니네요.
답변해 주신 여러분들 감사합니다.
제가 원하는 것은 vim에서 :%s/\<우정\>/사랑/g 와 같은 효과를 바랍니다.
즉 "우정, 우정은, 우정을 "과 같은 문자가 여러 file에 산재해 있다면 "우정"이라는 첫단어만 바꾸길 원합니다.
답변주신 분들의 방법으로 하면 모두 다 바뀌거든요.
질문을 애매하게 한 제 잘못 입니다. ^^;;

다른 방법이 있으신분의 고견을 바랍니다.

McKabi의 이미지

hermian wrote:
제가 원하는 것은 vim에서 :%s/\<우정\>/사랑/g 와 같은 효과를 바랍니다.
즉 "우정, 우정은, 우정을 "과 같은 문자가 여러 file에 산재해 있다면 "우정"이라는 첫단어만 바꾸길 원합니다.
답변주신 분들의 방법으로 하면 모두 다 바뀌거든요.

?
줄 단위라면 ^어쩌구$로 하면 충분합니다. vim에서 되면 perl에서도 충분히 됩니다.

ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y

익명 사용자의 이미지

Quote:
vim에서 :%s/\<우정\>/사랑/g

vi에서도 뒤에 g가 붙어있으면 전부 치환됩니다.
한 파일에서 1개 단어만 치환되게 하려면 윗분들의 예 중에서 g를 제외하면 됩니다.

ericsong의 이미지

find . -type f -exec perl -pi -e 's/[^a-z]kkk[^a-z]/jjj/' {} \;

이러면 될것 같은데요.

한글일 때는 안될것 같군요-_-;; 퍽*

cacolith의 이미지

펄 정규표현식중에 단어의 경계를 나타내는게 \b 가 있으니까...

find . -type f -exec perl -pi -e 's/\b우정\b/사랑/' {} \;

과 같이 하는 방법이 좋을 것 같은데요?
영어와 숫자만을 사용한다면 \W 를 이용하는 방법도 있을 것 같구요. :D

다즐링의 이미지

해결책 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번
정규표현식을 버린다.
정규식을 제외한 간단한 프로그램으로 해결한다.

다즐오빠만세 =3 wrote:

한글판 파이썬 스탠다드 라이브러리 7장
복잡합이 많이 아는 것이라고 오해하는 경향이 늘어나고 있다. 이런 잘못된
이해는 경외심보다는 의심만 불러일으킨다. 어쩌면 이런 경향은 약간은 이
상한 장치를 사용하는것이 컴퓨터를 많이 아는 것이라는 잘못된 믿음의 결
과이다. -니콜라우스 월쓰
한글판 파이썬 스탠다드 라이브러리 67쪽
어떤 사람은 문제에 직면했을 때, "알았다. 정규표현식을 쓰면 될꺼야" 라고 생각한다. 그러나 이제 이렇게 생각하는 사람들은 두개의 문제에 봉착하게 되었다.
-comp.lang.emacs의 Jamie Zawinsky

hermian wrote:
보통 문자열 치환의 방법은 많이 나와 있습니다만
file에
kkk
kkkk
kkkkkk
kkkkkkkkkk
...

가 있을 경우 정확히 kkk만 jjj로 치환하는 방법을 알고 싶습니다.
즉 첫째줄은 바뀌어도 나머지는 바뀌지 않아야 합니다.
그것도 모든 하위 디렉토리에 대해서요.
vi로 일일이 열어서 할려고 하니 너무 힘드네요. :(
여러 고수님들의 조언 부탁드립니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.