2017-05-04 4 views
0

matteo_test.sh이라는 파일이 있는데이 파일에는 /nettools/python_64 문자열이 포함되어 있습니다. 이 문자열을 /nettools/python_release/python278/으로 바꾸고 싶습니다.문자열을 sed로 바꾸어도 작동하지만 파일을 저장하지 않습니다.

나는 다음을 수행하십시오

original_str='/nettools/python_64' 
replace_str='/nettools/python_release/python278/' 
sed "s~$original_str~$replace_str~" matteo_test.sh 

내가 명령 줄이 나에게 파일 matteo_test.sh의 전체 내용을 출력하는 것을 실행

. 이 출력 된 내용 아래에서 문자열이 올바르게 바뀌 었음을 알 수 있습니다.

그러나 파일을 다시 열면 내부에 이전 문자열이 표시되므로 파일 자체의 내용이 수정되지 않았습니다.

내가 실행하는 sed 명령은 파일 자체로 바꾸는 대신 파일의 전체 내용을 포함하는 문자열로 바꾸는 것 같습니다.

저는 유닉스 쉘의 전문가가 아니므로, 아마도 매우 간단한 요점을 놓치고있을 것입니다. 누군가 내가 잘못하고있는 것을 이해하도록 도와 줄 수 있습니까?

제 목적은 해당 문자열을 파일로 대체하는 것입니다.

+0

파일의 내용을 업데이트하기 위해'sed -i'를 사용하십시오. – Kalanidhi

+0

@Kalanidhi는 많이 감사합니다. 내가 그것을 받아들이고 그것을 upvote 그래서 답변으로 작성하시기 바랍니다. –

답변

0

당신이 sed -i.bak을 사용하여 파일을 기존에 백업을 수행하려면 백업
으로 man sed

-i[SUFFIX], --in-place[=SUFFIX] 

       edit files in place (makes backup if extension supplied) 

참조

터미널

에 출력을 인쇄하는 대신 파일의 내용을 저장하는 sed -i을보십시오.

예 :

sed -i.bak 's/search/patter/' file_name.txt 

file_name.txt 내용이 업데이트 된 내용으로 변경됩니다,하지만 여전히 당신의 오래된 콘텐츠를 file_name.txt.bak

참고 :
어떤 퀘스트를 게시하기 전에 검색하시기 바랍니다 해당 질문과 관련된 google 페이지를 읽고 시간을 절약 할 수 있도록 man 페이지를 읽으십시오.

관련 문제