한 줄을 수정한 후 전체 문서 반환 - sed

한 줄을 수정한 후 전체 문서 반환 - sed

변수 값을 반복적으로 수정한 다음 나중에 실행하기 위해 이 수정 사항을 다른 파일에 저장하는 스크립트를 만들려고 합니다. 그러나 다음을 사용하는 경우:

sed '0,/pattern/  c\epsilon = ' $VaR $NameOfFile \
 > "NeWFile${VaR2}.txt"

변경된 줄의 텍스트만 반환합니다.

내 프로그램의 예는 다음과 같습니다.

..blablabla..
epsilon = 10
..moreblablabla..

스크립트를 실행한 후 새 파일과 해당 이름을 얻습니다. 단, 다음 내용만 포함됩니다.

epsilon = 34
..moreblablabla..

처음으로 나타나는 엡실론을 다른 값으로 변경하고 수정된 파일 전체를 다른 이름의 새 파일에 입력하고 싶습니다.

지금까지 제가 작성한 스크립트는 다음과 같습니다.

#!/bin/sh    
echo 'Hello, enter the name of the file you want to process with sed'
read NaMeoFFiLe
echo ''
echo 'Now, you should input the value of epsilon' \
        'you want to start with the loop'
read startepsilonvalue
echo Start epsilon value will be $startepsilonvalue
let lastepsilonvalue=$startepsilonvalue+1 #increase var by 1
echo Last epsilon value is: $lastepsilonvalue
let stteps=$startepsilonvalue*10
let lsteps=$lastepsilonvalue*10
for ((i=$stteps; i<=$lsteps; i+=1)); do
        k=$(bc <<<"""scale=1; $i /10")
        echo $k
        sed '0,/epsilon =/ c\epsilon = '$startepsilonvalue $NaMeoFFiLe \
               > "sample2iter${k}.txt"
done

코딩 모범 사례에 대한 다른 의견도 환영합니다.

답변1

명령이 작동하는 방식 은 다음과 같습니다 c\(강조).

    c\ 텍스트
    
        행 삭제주소 일치또는 주소 범위, 그리고 출력
        명령 뒤에 오는 텍스트 줄입니다.

약간만 수정하면 변경 내용을 범위의 마지막 행으로만 제한할 수 있습니다.

sed -e '0,/epsilon = /{//c\epsilon = '"$startepsilonvalue" -e '}' "$NaMeoFFiLe"

(빈 정규식은 //이전 정규식을 재사용하고 닫는 중괄호를 별도의 표현식으로 분할하는 트릭으로 -e인해 sed가 이를 변경된 텍스트의 일부로 볼 수 없습니다.) 또는 대신 시도해 보세요.

sed '0,/epsilon = .*/s//epsilon = '"$startepsilonvalue"'/' "$NaMeoFFiLe"

관련 정보