다른 하위 문자열이 존재하지 않는 경우에만 하위 문자열을 검색하고 바꿉니다.

다른 하위 문자열이 존재하지 않는 경우에만 하위 문자열을 검색하고 바꿉니다.

매우 큰 문서에 다음 문자열이 있습니다.

1.test.html#
2.test.md#
3.http://test.html#
4.https://test.md#
5.http://test.md#
6.test2.md#

이제 문자열에 아무것도 없는 .md#경우에만 각각을 다음으로 바꾸고 싶습니다 . 따라서 2와 6만 교체해야 합니다. 쉘 스크립트에서 이 작업을 어떻게 수행할 수 있습니까?.html#http

답변1

GNU sed를 사용하세요. 현재 라인(패턴 공간)에 http스크립트 끝( )이 포함되어 있으면 스크립트 끝으로 이동합니다 b. 그렇지 않으면 검색하고 바꾸십시오.

sed '/http/b; s/\.md#/.html#/' file

산출:

1.테스트.html#
2.테스트.html#
3.http://test.html#
4.https://test.md#
5.http://test.md#
6.테스트2.html#

파일을 "제자리에서" 편집하려면 sed의 options 을 사용하십시오 -i.


바라보다:man sed

답변2

perl -pe'/http/ or s/\.md#/.html#/' input.txt > output.txt
perl -pe'/http/||s/\.md#/.html#/' input.txt > output.txt   #same
perl -i -pe'/http/||s/\.md#/.html#/' file.txt              #edit inplace, changes file.txt
perl -i.bk -pe'/http/||s/\.md#/.html#/' files*.txt         #same with backups to .bk files

sed그들은 awk훌륭하지만 perl그들이 가진 모든 것과 그 이상을 가지고 있습니다.

관련 정보