![각 줄의 끝에 텍스트를 추가하세요.](https://linux55.com/image/54486/%EA%B0%81%20%EC%A4%84%EC%9D%98%20%EB%81%9D%EC%97%90%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EC%84%B8%EC%9A%94..png)
다음과 같은 많은 명령을 시도했습니다.
sed -i '' "s/$/<@string>/" txt.txt > txt2.txt
이로 인해 txt2.txt가 비어 있게 됩니다. 이유는 무엇입니까? ! ?
sed 's/$/<@string>/' txt.txt > txt2.txt
이것은 전혀 아무 일도 하지 않으며 경로가 <string>
존재하지 않는다는 것을 알려줍니다.
그럼 어떻게 해야 할까요? 저는 OS X를 사용하고 있기 때문에 bsd sed를 사용하고 있습니다.
답변1
이 -i
스위치를 사용하면 sed
원본 파일이 편집됩니다. 이는 출력이 없음을 의미하며, 출력이 없으므로 리디렉션하면 빈 파일이 생성됩니다.
그러니까 당신이 원하는 건
sed -i '' 's/$/<@string>/' txt.txt
그렇지 않으면 원본이 변경됩니다 txt.txt
.
sed 's/$/<@string>/' txt.txt > txt2.txt
답변2
-i
옵션은 Linux와 Unix 간의 호환성이 낮 sed
으며 다른 운영 체제에서는 사용하지 못할 수도 있습니다.
둘째, 자신을 제외시키기 때문에 -i
IO 리디렉션( )과 함께 사용할 수 없습니다 . >
파일이 내부 편집을 사용하여 수정되었습니다.
따라서 파일을 제자리에서(동일한 파일로) 편집하려면 다음을 사용하는 것이 좋습니다.ex
:
ex +"%s/$/<@string>/g" -cwq foo.txt
문자열을 바꾸고 다른 파일에 쓰려면 다음을 시도하십시오.
ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt
이 명령은 ex
와 동일합니다 vi -e
.