vi 에서 맨앞에 글마다 행넣기.....

jeongil의 이미지


처음 글을 쓰는데 잘못썻거나 오류가 있으면 바로 지적 부탁드립니다.
수정하겠습니다.

제가 가진 것은 제가 가진 디렉토리의 모든 object 를 지우기 위해
아래처럼 obj.txt 라는 파일로 object 들을 필터링했더니
토탈 1400 여개의 라인에 object 들이 생겼습니다.

이 1400여개의 object 를 한꺼번에 rm 으로 지우려고 하다보니
vi 에서 맨앞에
\rm-rf 를 넣고 싶은데...
1400개 일일히 하는것도 어렵고...

이거 정규식으로 어떻게 했던거 같은데 잊었네요...
방법이 없을까요???

obj.txt

./lib/root.debug.crypto.o
./lib/root.debug.cspf.o
./lib/root.debug.dhcp_relay.o
./lib/root.debug.dvmrp.timer.o
./lib/root.debug.firewall.o
./lib/root.debug.fr.mfr.o
./lib/root.debug.fr.packet.o
./lib/root.debug.framer.o
./lib/root.debug.gmrp.o
./lib/root.debug.igmp.snooping.o
./lib/root.debug.ip.dhcps.o
./lib/root.debug.ip.http.o
./lib/root.debug.ip.statistics.o
./lib/root.debug.ip.tunnel.o
등등....아래 생략...밑에 1400여라인..

이것을
\rm -rf ./lib/root.debug.crypto.o
\rm -rf ./lib/root.debug.cspf.o
\rm -rf ./lib/root.debug.dhcp_relay.o
\rm -rf ./lib/root.debug.dvmrp.timer.o
\rm -rf ./lib/root.debug.firewall.o
\rm -rf ./lib/root.debug.fr.mfr.o
\rm -rf ./lib/root.debug.fr.packet.o
\rm -rf ./lib/root.debug.framer.o
\rm -rf ./lib/root.debug.gmrp.o
\rm -rf ./lib/root.debug.igmp.snooping.o
\rm -rf ./lib/root.debug.ip.dhcps.o
\rm -rf ./lib/root.debug.ip.http.o
\rm -rf ./lib/root.debug.ip.statistics.o

이렇게 1400여개를 다 넣고 싶네요...

치환명령어인
%s/aaa/bbb/g 밖에 모르는데...
그리고 이러한 정규식을 다 공부하려면 어떤책, 어떤 사이트를 봐야하는건가요???

sangwoo의 이미지

지우시는 게 목적이라면
cat obj.txt | xargs rm -rf
하셔도 될 것 같습니다. argument 수 제한에만 안걸린다면..
argument가 너무 많다는 메시지가 나오면

for i in `cat obj.txt`; do
    rm -rf $i
done

이런식으로 하시면 되겠네요.

정규식에 대해서는 O'reilly에서 나온 sed & awk 라는 책 추천해봅니다.
----
Let's shut up and code.

----
Let's shut up and code.

라키시스의 이미지

vim을 사용하신다면 정규식을 굳이 쓰실 필요는 없습니다.
normal mode에서

ggVG:norm I\rm -rf ENTER

하시면 됩니다.
ENTER는 그냥 엔터키를 치라는 뜻입니다.

라키시스의 이미지

굳이 정규식을 쓰고 싶으시다면

:%s/\(^.*$\)/\\rm -rf \1/g

를 하시면 됩니다.

sixmen의 이미지

:%s/^/rm -rf/

와 같이 하시면 됩니다. ^는 그 줄의 첫부분에 대응합니다. 첫부분을 치환하는거죠
$는 줄의 뒷부분입니다.

---

다른 방법으로는 macro를 활용할 수도 있습니다. 커서를 첫부분에 놓고
qa 하면 a에 macro 기록을 시작하고 그 상태에서
irm -rf0j
인가를 하면 첫줄에 rm -rf 가 입력된 상태로 다음 줄 첫부분에 커서가 가 있겠죠?
그렇게 하고 q를 누르면 macro 입력이 끝납니다.
그리고 @a를 누르면 macro가 실행됩니다. 1400번 실행하려면 1400@a라고 하면 되고요

이 예의 경우에는 이렇게 할 필요가 없지만, 앞에 1,2,3,4, 이렇게 다른 걸 추가하고
싶은 경우 전 macro를 활용합니다.

---

뭐 그 이전에 단순히 지우는게 목적이라면 윗분 글 처럼 하시던지 아니면 아예 obj.txt를 만드는게 아니고

find -name "*.o" -exec rm -f {} (정확하진 않습니다)

와 같이 find 자체로 찾은 파일에 대해 개별적으로 명령실행이 가능합니다.

shyblue의 이미지

find . -name "debug.*.o" -exec rm -f {} \;

時日也放聲大哭

時日也放聲大哭

irondog의 이미지

Quote:
:%s/^/rm -rf /g

또는
vertical visual block을 쓰시면 됩니다.
보통은 ctrl-v키로 매핑되어 있습니다.
첫줄 맨 앞에 키를 위치하시고 ctrl-v를 누르고
맨아래 위치까지 내립니다.
그리고 shift-i(large I)를 입력하고 'rm -rf '를 입력해 주시고 esc키를 누르면 모든 행에 'rm -rf'가 자동으로 입력 됩니다.

suns1997의 이미지

그냥 각 줄마다 \rm -rf 추가해도 될꺼 같은데..

suns1997의 이미지

vi 였군요^^;

eungkyu의 이미지

gg0<C-v>GI\rm -f <ESC>

쓰고보니 위엣분도 써주셨네요 ^^

댓글 달기

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