명령 줄을 통해 HTML 파일에서 찾기 및 바꾸기를 실행하고 싶습니다.
내 명령은 다음과 같습니다.
sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html
이것을 실행하고 나중에 파일을 보면 비어 있습니다. 내 파일의 내용을 삭제했습니다.
파일을 다시 복원 한 후 이것을 실행하면 :
sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
는 stdout
파일의 내용이고, 찾아 실행 된 대체합니다.
왜 이런 일이 발생합니까?
답변
때 쉘이 보고 > index.html
명령 줄에서 파일이 열립니다 index.html
에 대한 쓰기 모든 이전 내용을 닦아.
이 문제를 해결하려면 -i
옵션 을 전달하여 sed
변경 사항을 인라인으로 만들고 원본 파일의 백업을 작성하여 변경 작업을 수행해야합니다.
sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
.bak가 없으면 Mac OSX와 같은 일부 플랫폼에서 명령이 실패합니다.
답변
대안적이고 유용한 패턴은 다음과 같습니다.
sed -e 'script script' index.html > index.html.tmp && mv index.html.tmp index.html
이것은 -i
옵션 을 사용하지 않고 거의 동일한 효과를 가지며 , sed 스크립트가 어떤 이유로 실패하면 입력 파일이 방해받지 않는다는 것을 의미합니다. 또한 편집에 성공하면 백업 파일이 남아 있지 않습니다. 이런 종류의 관용구는 Makefile에서 유용 할 수 있습니다.
상당히 많은 썰매가 -i
옵션을 가지고 있지만 전부는 아닙니다. posix sed는 그렇지 않은 것입니다. 따라서 이식성을 목표로하는 경우에는 피하는 것이 가장 좋습니다.
답변
sed -i 's/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g' index.html
이것은 index.html 파일을 전체적으로 대체합니다. 문자열을 인용하면 쿼리 및 공백의 공백 문제를 방지 할 수 있습니다.
답변
sed의 -i 옵션을 사용하십시오. 예 :
sed -i bak -e s/STRING_TO_REPLACE/REPLACE_WITH/g index.html
답변
여러 파일을 변경하고 각 백업을 * .bak로 저장하려면 다음을 수행하십시오.
perl -p -i -e "s/\|/x/g" *
디렉토리에있는 모든 파일을 가지고 대체 할 |
로 x
는 “펄 파이”라고이 (쉽게 파이)
답변
-i
전체 편집 옵션 을 사용해보십시오 .
답변
sed -i.bak "s#https.*\.com#$pub_url#g" MyHTMLFile.html
추가 할 링크가 있다면 이것을 시도하십시오. 위와 같이 URL을 검색하고 (https로 시작하고 여기서 .com으로 끝남) URL 문자열로 바꾸십시오. $pub_url
여기 에 변수를 사용했습니다 . s
여기서는 검색을 g
의미하며 전체 교체를 의미합니다.
효과가있다 !