[shell] 파일에서 찾기 및 바꾸기 및 파일 덮어 쓰기가 작동하지 않아 파일을 비 웁니다.

명령 줄을 통해 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의미하며 전체 교체를 의미합니다.

효과가있다 !