vi에도 replace files기능 있나요?

prether의 이미지

하나가 아닌 여러 파일들에 있는 특정 pattern을 한번에 변경하고 싶습니다.
source insight같은 프로그램에는 replace files기능이 있어서 한번에 가능한 것으로 알고 있습니다. vi에도 그러한 명령이 있나요?

궁여지책으로 macro(한 파일 :%s로 변경하고 :bn하기 반복)를 만들어서 사용하고 있습니다.

palsuet의 이미지

무식한 방법인긴 하지만 저는 vim의 -S라는 옵션을 써서 쉘의 for문을 돌렸습니다. 그러니까 예를 들면 script.vim라는 파일에

:%s/1/2/g
:wq

라고 저장한 다음에(:wq 다음에 줄바꾸기 해야 합니다!) 쉘에서
for file in *
do
vim -S script.vim ${file}
done

라고 실행하면 됩니다.
제가 써놓고도 너무 허접하네요. 깔끔한 방법을 아시는 분이 있으시면 알려주세요.
--
feel the gravity

feel the gravity

jellypo의 이미지

sed -e 's,패턴,바꿀단어,g' 파일명 > 파일명_tmp; mv 파일명_tmp 파일명

이런 방법이나

gawk
perl -pi -e 's,패턴,바꿀단어,g' 파일명
을 이용하시는게 더 편하지 않나요?

vi(m)에는 어지간한 사람이 상상할 수 있는 모든 기능이 있으니 뭔가 방법이 있으리라고 생각합니다만... 그냥 아는 내용 중에 해결하는게 더 편해서 ^^;

jellypo의 이미지

검색해보니
여러개의 html 파일을 수정하려면
vim *.html 한 뒤에
:args
:argdo
를 이용하면 된다고 합니다. 명령어로 추정컨데 인자에 대해 뭔가 수행하는 것 같군요.

자세한 내용은 여길 참조하세요. ...
http://tweetypie.doc.ic.ac.uk/~cho/s/index.php?/archives/19-VIM-search-and-replace-multiple-files.html

ssggkim의 이미지

좋은 link 감사합니다. :)

nightz의 이미지

여러개의 파일 읽어 들일때 find를 이용해서 읽어 들이면 좀 더 편하게 읽어 들일수 있습니다.

vim `find . *.html`

이렇게 실행하고
:ls
를 해 보시면, 여러개의 파일이 목록에 올라 온 것을 보실 수 있을 겁니다.
목록을 확인하시고..
아래와 같이 변환 하시면 됩니다.

:argdo %s/foo/bar/g |w

JellyPo님하고 중복된 답변 같기는 한데 ^^;;;
조금 정리 해 봤습니다.

superkkt의 이미지

마지막에 |w는 어떤 뜻인가요?

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

nightz의 이미지

저장하라는 의미 입니다.

자세한 내용은 vim상태에서
:help argdo
해 보세요.

jellypo의 이미지

대충 통밥을 굴려 생각해보면,

argdo 는 인자로 들어온 파일을 버퍼로 불러와 하나씩 처리할 겁니다. 명령어를 실행하고 버퍼의 다음 인자를 처리해야 하는데 변경된 내용이 버려지지 않도록 |w 하는거 같네요. |q! 하면 하나씩 버퍼만 바꾸고 파일 내용은 안 바꾸겠네요

...실제 실행은 하나도 안해보고 대충 추측만;;

OpenSnake의 이미지

예을들어 리눅스 utf8 에서 작성한 텍스트파일을 윈도우에서 불러오면
개행문자가 처리가 안되어있더군요...

이걸 윈도우형태로 변환하고 싶을때요....
(근데 이 파일의 100개정도 있습니다...)

개행문자는 눈에도 안보이는데 이럴때는 어떻게 처리하나요??

이렇게 보이는 이유가 리눅스에서는 개행문자을 하나로 처리하고
윈도우에서는 두개로 처리해서 그렇다는데......(맞나요?)

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

Prentice의 이미지

dtou, utod, todos, fromdos, dos2unix, unix2dos 등의 스크립트나 실행파일이 많이 있습니다.

http://packages.debian.org/tofrodos

OpenSnake의 이미지

여러가지 찾아봤는데요...
윈도우와 리눅스 차이점이 이렇게 나왔더군요

유닉스 파일에서 새로운 줄로 변경시 사용하는 문자는 lf(line feed)입니다.
도스나 윈도우즈인 경우는 lf(line feed )와 cr(carrage return)를 같이 사용합니다.
맥에서는 cr만 사용합니다.

제일 쉽게 변환할려면..
 vim에서 파일 포맷을 정하려면
:set ff=unix 나
:set ff=dos 을 사용후 :w 하는 방법도 있습니다.

여러파일을 한꺼번에 바꿀라고 했더니
tofrodos 설치후에...
그냥 todos *.txt 나 fromdos *.txt 로 간단히 변환이 가능했습니다..

근데 문제는 ./ 이 디렉터리 밑에 또다른 디렉터리가 있으면 그 안에있는 파일은 변환이 안되더군요..
혹시 같이할려면 어떻게 해야하나요??

./
./test0.txt
./01/test1.txt 이게 변환이 안됨...

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

Prentice의 이미지

find -type f -name '*.txt' -exec fromdos '{}' \;

OpenSnake의 이미지

잘되네요... :)

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

shinsuk의 이미지

find . -iname "links.txt" > links.txt
vim `cat links.txt `
qq:%s/ -shared / -specs=msvcr71 -mthreads -mdll /gq
qw@q:w!:n@wq

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.