파일의 세 번째 줄에서 마지막 줄까지의 마지막 패턴을 바꾸는 방법

파일의 세 번째 줄에서 마지막 줄까지의 마지막 패턴을 바꾸는 방법

파일의 마지막 줄에서 세 번째 줄에 있는 문자열의 마지막 항목을 바꾸려는 파일이 있습니다. 다음과 같은 파일이 있습니다.

  analyze_compression_testpoints -log no -TESTMODE FULLSCAN
  -EXPERIMENT <br /> azul_rrfa -outputfile
  ./testresults/testinsertion.file<br />
</body>
</html>

마지막 줄에서 세 번째 줄만 바꾸고 싶습니다 <br />. </font>나는 다음을 사용하고 있습니다 :

sed -i "s|\(.*\)<br />\$|\1</font>|g"

그러나 각 줄의 마지막 항목을 모두 바꾸는 것이지만 모든 줄이 아닌 파일의 마지막 항목만 원합니다.

답변1

그리고 sed:

tac file | sed '3 s|<br />$|</font>|' | tac

그리고 ed:

echo -e '$-2s/<br \/>$/<\/font>/\nw' | ed -s file

그리고 vim:

:$-2 s!<br />$!</font>!

답변2

이것이 파일의 마지막 항목이므로 다음 sed스크립트를 사용할 수 있습니다.

sed -i 'H;1h;$!d;g;s_\(.*\)<br />_\1</font>_' yourfile.html

또는 GNU sed및 확장 정규식을 사용하여 단순화합니다.

sed -izE 's_(.*)<br />_\1</font>_' yourfile.html

비결은 하나의 버퍼에서 전체 파일을 처리하는 것입니다. POSIX 버전은 보유 버퍼에 수집하여 이를 수행하고, GNU 버전은 -z이 옵션을 사용합니다. 그런 다음 패턴의 마지막 발생을 포함하여 s모든 항목 교체( ) 명령을 사용하고 해당 패턴 이전의 모든 항목( 의 부품 참조 )을 교체하고 교체합니다..*\1()

마지막 행에서 세 번째 행만 바꿔야 하는 경우 다른 시도(일치하는 항목이 없으면 바꾸지 말고 마지막 행이나 마지막 행에서 두 번째 행을 바꾸지 마세요):

sed '1N;N;$!{P;D];s_<br />_</font>_' yourfile.html

관련 정보