매우 큰 문서에 다음 문자열이 있습니다.
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
그들이 가진 모든 것과 그 이상을 가지고 있습니다.