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