2012-08-29 4 views
1

처음 다섯 줄을 삭제하여 파일을 편집하려면 Vi 또는 ex를 사용하여 명령을 실행하려고합니다. 을 y으로 바꾸고 각 줄의 끝에서 여분의 공백을 제거하고 캐러지 리턴을 유지하고 파일의 마지막 8 줄을 제거한 다음 파일의 이름을 쉘 스크립트로 바꾸고 현재 스크립트에서 새 스크립트를 실행하십시오.Linux 쉘 스크립트를 사용하여 파일을 편집하고 이름을 바꿉니다.

이것은 cron에서 예약 된 것입니다. 내가 명령 줄이나 빔 스크립트 또는 뭔가를 사용하여 그것을 할 수있는 간단한 방법을 찾고있다.

아이디어가 있으십니까? 입력 파일의 형식은 바뀌지 않고 줄 수만 변경되므로 마지막 8 줄의 줄 번호를 지정할 수 없습니다.

+4

당신은 그 생각이 나쁜 것 같은데, 맞습니까? 아마 당신이 묘사 한 것을 할 필요가 있을지 모르지만, 당신이 묘사 한 프로세스를 디버깅하는 것은 매우 재미있을 것입니다. 여기에 문서를 사용하여 –

+1

스크립팅 'ex'이 가능합니다. 모든 '이전'이 정확히 똑같은 반응을하는 것은 아니며, 실험을해야합니다. OS를 바꾸면 땜질없이 작동하지 않을 수 있습니다. 위에 언급 한 것처럼 재미없고 깨지기 쉽지 않습니다. 행운을 빕니다. – shellter

+2

가끔 이런 장애물 문제가 숙제로 드러납니다. –

답변

0

스크립트로 파일을 편집하려면 ed을 사용할 수 있습니다 (배우거나 기억하기 어렵더라도).

목표를 달성하기 위해 스크립팅 언어 (Python, Perl, AWK, Ruby)를 사용할 수도 있습니다.

1

실제로 여기에 약 6 개의 질문이 있습니다. 첫 번째 다섯 가지에 대한 대답은 아마도 가장 어려운 문제를 해결할 것입니다.

sed -e ':label' -n -e '1d' -e 's/x/y/g' -e 's/[ \t]*$//g' -e '1,9!{P;N;D};N;b label' file.txt > script.sh 
1

Vi는 대화 형 편집기입니다. 아마도 cron이 실행할 무언가에 사용하고 싶지 않을 것입니다. 또한, 나는 이것이 아마도 나쁜 생각이라는 의견에 동의한다. 그럴 수 있습니다 :

printf 'one\ntwo\nthree\nfour\nfive\necho x \n1\n2\n3\n4\n5\n6\n7\n8\n' \ 
| sed '1,5d;s/ *$//;s/x/y/' \ 
| tail -r | sed 1,8d | tail -r \ 
| sh 

첫 번째 sed 스크립트가 대부분의 작업을 수행합니다. tail -r으로 줄을 바꾼 다음 처음 8 줄을 지운 다음 다시 뒤집습니다. 마지막 8 줄을 잘라냅니다.

Linux 시스템 (또는 GNU coreutils를 사용하는 모든 시스템)에서 tac 명령을 역주로 사용할 수 있지만 tail -r이 더 이식성이 높습니다.

또한 최종본 | sh은 단순히 출력을 실행합니다. 정말로 이것을 스크립트로 저장하고 싶다면 출력을 파일로 리다이렉션하여 할 수 있습니다 ...하지만 적어도 그 것을 당신의 상상력으로 남겨 둘 것입니다. 당신을 위해 모든 스크립팅을 할 수는 없습니까? :-)

관련 문제