BSD의 csh에서 sed를 사용하여 한 줄을 두 줄로 바꾸는 방법은 무엇입니까?

BSD의 csh에서 sed를 사용하여 한 줄을 두 줄로 바꾸는 방법은 무엇입니까?

여기에 다음 내용이 포함된 매우 간단한 텍스트 파일이 있습니다.

line1
line2
line3
line4

sed(또는 다른 애플리케이션)를 통해 콘텐츠를 수정하고 싶습니다.

line1
line2
#this line was added by sed
line3
line4

그래서 시도해 보았지만 sed -e "s/line2/line2\\n#this line was added by sed/" my-text-file-here.txt결과는 다음과 같습니다.

line1
line2\n#this line was added by sed
line3
line4

올바르게 수행하는 방법에 대한 아이디어가 있습니까? 감사해요

답변1

GNU sed를 사용하면 코드가 제대로 작동합니다.

$ sed -e 's/line2/line2\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

그러나 BSD sed에서는 \n대체 텍스트에서 개행 문자가 고려되지 않습니다. 쉘이 bash인 경우 좋은 해결 방법은 $'...'개행을 삽입하는 것입니다.

$ sed -e $'s/line2/line2\\\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

bash 외에도 zsh 및 ksh도 지원됩니다 $'...'.

또 다른 옵션은 실제 개행 문자를 삽입하는 것입니다.

$ sed -e 's/line2/line2\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

업데이트: csh에서 마지막 옵션에는 추가가 필요합니다 \.

% sed -e 's/line2/line2\\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

답변2

네가 원하는 것 같아실제로는 보류 명령입니다. Bash 또는 지원되는 쉘 사용 $'\n'(대부분):

sed $'/line2/a\\\n#this line was added by sed\n' file.txt

또는 더 읽기 쉽게 sed 명령 파일을 사용하십시오.

/line2/a\
#this line was added by sed

전체 방법 표시:

$ cat file.txt 
line1
line2
line3
line4
$ cat sedfile 
/line2/a\
#this line was added by sed
$ sed -f sedfile file.txt 
line1
line2
#this line was added by sed
line3
line4
$ 

답변3

이것은 가상의 csh쉘입니다:

한 줄씩 추가하면 됩니다.

% sed '/line2/a\\
# new line here\
' file
line1
line2
# new line here
line3
line4

다른 행 앞에 행을 삽입하려면 다음을 수행합니다.

% sed '/line3/i\\
# new line here\
' file
line1
line2
# new line here
line3
line4

한 줄을 두 개의 새로운 줄로 바꾸려면 다음 명령을 사용하십시오 s.

% sed 's/line2/&\\
# new line here/' file
line1
line2
# new line here
line3
line4

OpenBSD 6.1에서 실행되며 sed기본 csh시스템에서 테스트되었습니다.

관련 정보