여기에 다음 내용이 포함된 매우 간단한 텍스트 파일이 있습니다.
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
시스템에서 테스트되었습니다.