
이와 같은 한 줄을 사용할 때 이전 파일의 변수를 새 파일로 바꾸고 싶습니다.
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
newFile의 결과가 있습니다.
하지만 다음과 같이 2줄 이상을 사용하는 경우:
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" > newFile
cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" > newFile
newFile 결과가 없습니다. 수면을 사용하려고 하지만 작동하지 않습니다. 추신. 두 번째와 세 번째 줄은 동일한 파일에서 변수를 바꿉니다. 어떤 충고?
답변1
리디렉션은 명령이 실행되기 전에 파일을 방해(삭제)합니다. sponge
의 명령더 많은 유틸리티, 파일에 쓰기 전에 표준 입력을 흡수합니다. 이렇게 하면 명령이 실행된 후 파일을 덮어씁니다.
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" | sponge newFile
cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" | sponge newFile
moreutils가 없으면 임시 파일을 사용할 수 있습니다. 또한 사용할 필요는 없습니다 cat
.
sed "s@$dayMaxInNew@$dayMaxIn@g" < ../oldFile.html > newFile
sed "s@$dayAvgInNew@$dayAvgIn@g" < newFile | sponge newFile
sed "s@$dayCurInNew@$dayCurIn@g" < newFile | sponge newFile
마지막으로 여러 sed 명령을 하나로 결합할 수 있습니다.
sed "s@$dayMaxInNew@$dayMaxIn@g
s@$dayAvgInNew@$dayAvgIn@g
s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile
또는
sed -e "s@$dayMaxInNew@$dayMaxIn@g" \
-e "s@$dayAvgInNew@$dayAvgIn@g" \
-e "s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile
답변2
리디렉션하려는 파일의 데이터를 절대 소비하지 마세요. 리디렉션은 일반적으로 사용자가 파일을 읽을 기회를 갖기 전에 파일을 방해합니다. 대신 여러 sed
명령을 사용하십시오.
sed "command1;command2;command3" < ../oldfile.html > newFile