sed가 예상대로 작동하지 않습니다

sed가 예상대로 작동하지 않습니다

이 문자의 모든 인스턴스를 대체하기 위해 이 스크립트를 사용하고 싶습니다.묻다"question.txt" 파일의 내용을 포함하는 파일. 대신에 일어나는 일은 모든 인스턴스가묻다파일의 내용은 사라지고 "question.txt"의 내용이 새 파일 하단에 인쇄됩니다.

어떤 아이디어가 있나요?

sed -i.bkp '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' Commision.txt 

편집 1

어떤 버전을 가지고 있는지 알아보려고 하는데 계속 이런 메시지가 나타납니다.

여기에 이미지 설명을 입력하세요.

답변1

이유를 찾은 것 같아요.

파일 이름 뒤에 공백을 넣으면 뒤에 공백이 있는 파일 이름이 검색됩니다. 다음과 같이 문제를 재현할 수 있습니다.

원천:

cat q.dat
Q
Not q
And Q again
And again not


cat kuh.dat 
Die dumme
Kuh

파일 이름 "kuh.dat"에 대한 작업 예:

sed '/Q/{
s/Q//g
r kuh.dat
}' q.dat

Die dumme
Kuh
Not q
And  again
Die dumme
Kuh
And again not

이제 "kuh.dat"를 사용한 실패한 예가 있습니다.

sed '/Q/{
s/Q//g
r kuh.dat 
}' q.dat

Not q
And  again
And again not

파일명을 인용하지 않아서 파일명 끝의 공백이 인식되는 것이 저에게는 큰 놀라움이었습니다. 그리고 셸에서는 볼 수 없어서 오랫동안 검색했지만 성공하지 못했습니다. 이 두 예의 차이점은 무엇입니까?

관련 정보