VIM 또는 EX의 bash 스크립트를 통해 파일의 특정 줄을 바꿀 수 있습니까?

VIM 또는 EX의 bash 스크립트를 통해 파일의 특정 줄을 바꿀 수 있습니까?

구문을 사용하여 파일의 특정 줄(예: 5번째 줄)을 수정하고 싶습니다. EOEX어떻게 하면 목표를 달성할 수 있습니까? 내 목적을 달성하기 위해 사용하는 코드 조각은 다음과 같습니다.

#!/bin/bash
S=0.030
F=0.150
N=30
DIFF=`echo "scale=3; $F - $S" | bc -l`
dw=`echo "scale=3; $DIFF / $N" | bc -l`
is=`echo "scale=3; $S / $dw" | bc -l`
if=`echo "scale=3; $F / $dw" | bc -l`
ex ~/Desktop/Dropbox/MATLAB/FFT.m  <<EOEX
  :5s/for*/for i = $S:$dw:$F/g
  :x
EOEX

나는 몇 가지 조사를 한 결과 EOF(파일 끝) 이 특정 명령의 표준 입력으로 리디렉션하는 here scripts 데 일반적으로 사용된다는 것을 발견했습니다(내 경우에는 ). 또한 여는 키워드와 닫는 키워드가 동일하다면 어떤 단어라도 대신 사용할 수 있다는 것도 배웠습니다. 내 문제는 원하는 효과를 얻는 것(즉, 이 스크립트에서 줄을 다른 초기화 프로그램으로 바꾸는 것) 외에도 줄을 삭제하지 않고 다섯 번째 줄 끝에 문자열을 추가한다는 것입니다. 참고로 FFT.m 파일도 추가했습니다. 이전 질문의 추상적 성격으로 인해 불편을 끼쳐드린 점 사과드립니다. 원하는 효과를 얻기 위해 다른 프로그램을 사용할 의향도 있지만 왜 or에서 작동하지 않는지 궁금합니다. 클릭하세요I/OexEOFfor loopMatlabexvim여기Matlab 스크립트입니다.

답변1

test_file"hello world"("여기에 문서"를 의미하는 것 같습니다)라는 파일의 5번째 줄을 구조 변경하여 사용하려면 다음과 같이 하세요.exEOEX

ex test_file << EOEX
5c
hello world
.
wq
EOEX

위 명령도 작동 ed하지만 POSIX ed에서는 지원되지 않습니다 wq. 대신 w및 를 q별도의 줄에 입력하세요.

사용하기가 더 쉽습니다 sed(이 옵션을 지원하는 버전 ).-i

sed -i '15 c hello world' test_file

관련 정보