vi 에서 맨앞에 글마다 행넣기.....
처음 글을 쓰는데 잘못썻거나 오류가 있으면 바로 지적 부탁드립니다.
수정하겠습니다.
제가 가진 것은 제가 가진 디렉토리의 모든 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 밖에 모르는데...
그리고 이러한 정규식을 다 공부하려면 어떤책, 어떤 사이트를 봐야하는건가요???
지우시는 게
지우시는 게 목적이라면
cat obj.txt | xargs rm -rf
하셔도 될 것 같습니다. argument 수 제한에만 안걸린다면..
argument가 너무 많다는 메시지가 나오면
이런식으로 하시면 되겠네요.
정규식에 대해서는 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
를 하시면 됩니다.
치환은..
:%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 자체로 찾은 파일에 대해 개별적으로 명령실행이 가능합니다.
find . -name "debug.*.o"
find . -name "debug.*.o" -exec rm -f {} \;
時日也放聲大哭
時日也放聲大哭
vertical visual block을
또는
vertical visual block을 쓰시면 됩니다.
보통은 ctrl-v키로 매핑되어 있습니다.
첫줄 맨 앞에 키를 위치하시고 ctrl-v를 누르고
맨아래 위치까지 내립니다.
그리고 shift-i(large I)를 입력하고 'rm -rf '를 입력해 주시고 esc키를 누르면 모든 행에 'rm -rf'가 자동으로 입력 됩니다.
그냥 각 줄마다...
그냥 각 줄마다 \rm -rf 추가해도 될꺼 같은데..
vi였군요^^:
vi 였군요^^;
gg0<C-v>GI\rm -f
쓰고보니 위엣분도 써주셨네요 ^^
댓글 달기