이 sed 명령에서 이스케이프된 개행 문자에 어떤 문제가 있나요?

이 sed 명령에서 이스케이프된 개행 문자에 어떤 문제가 있나요?

각 줄 뒤에 줄을 추가하기 위해 sed를 사용하려고합니다 text += num.toString(16);.

내 접근 방식은 다음과 같습니다 Replace every new line with a new line, plus text += num.toString(16);. 그건:

sed 's/\
/\
text \+= num\.toString\(16\);/g'

하지만 나는 이것을 작동시킬 수 없습니다. 나는 unterminated substitute patternsed에서 그것을 얻습니다.

여기에 문제가 있나요?

BSD sed를 사용하고 있습니다.

답변1

다음은 사용할 수 없습니다:

s/\
/

s/pattern/replacement/양식의 패턴 공간에서 개행 문자 와 일치합니다 . 패턴을 해석하는 구현에 따라 다릅니다. GNU sed와 BSD sed는 모두 문자 그대로 개행 문자로 취급하지만 BSD sed는허용되지 않음그리고오류가 발생합니다.

일반적으로 입력 줄 끝에서는 개행을 일치시킬 수 없지만 \n명령의 결과로 패턴 공간에 나타나는 줄 바꿈을 일치시킬 수 있습니다 N.

올바른 방법은 POSIXLY입니다.

sed 'a\
text += num.toString(16);
'

또는:

sed 's/$/\
text += num.toString(16);/'

답변2

다음에도 동일하게 적용됩니다 awk.

awk '{print $0"\ntext += num.toString(16);"}' file

이 경우 각 줄은 그대로 인쇄된 다음 새 줄에 인쇄됩니다 awk.text += num.toString(16);

관련 정보