파일의 19행에 다음이 포함되어 있습니다.
send -- "[email protected]\r"
이메일을 바꾸고 싶어서 고민하다가 이렇게 하게 됐어요
sed -i.bak '19s/.*/send -- "[email protected]\r"/' ./a
19번째 줄이 바뀌었지만 내가 얻는 것은
"end -- "[email protected]
무엇이 잘못되었으며 어떻게 해결하나요?
답변1
백슬래시는 패턴의 이스케이프 문자 sed
이므로오자캐리지 리턴이 삽입되었습니다. 당신이 원하는 것은 \\r
이스케이프 백슬래시 뒤에 리터럴이 오는 것 입니다 r
.
답변2
검색하여 바꾸는 대신 19번째 줄만 변경할 수 있습니다.
sed '19c\send -- "[email protected]\\r"'
답변3
필요 이상으로 이 작업이 더 어려워지고 있습니다. 전체 줄이 아닌 이메일 주소만 변경하면 됩니다. 시연하려면:
$ echo 'send -- "[email protected]\r"' | sed 's/old@example\.com/[email protected]/'
send -- "[email protected]\r"
그런데, 검색 패턴이 한 줄에 두 번 이상 나타날 수 있는 경우 g
명령 명령 끝에 (전역) 수정자를 선택적으로 사용할 수 있고/또는 대소문자를 구분하지 않는 검색을 원하는 경우 (대소문자 무시) 수정자를 사용할 수 있습니다. 둘 다 사용하십시오: .s///
i
s/old@example\.com/[email protected]/ig
어쨌든 명령은 다음과 같습니다.
sed -i.bak '19s/old@example\.com/[email protected]/' ./a
변경할 정확한 줄 번호를 몰랐다면 줄 번호 대신 줄 주소로 정규 표현식을 지정하세요.
sed -i.bak '/^send.*old@example\.com/ s/old@example\.com/[email protected]/' ./a
모든 항목을 변경하는 것이 훨씬 더 쉽습니다.[이메일 보호됨]파일에서 주소를 지정하지 않아도 파일의 모든 줄에서 대체가 발생합니다.
sed -i.bak 's/old@example\.com/[email protected]/' ./a