여러 sed 명령을 올바르게 연결하는 방법

여러 sed 명령을 올바르게 연결하는 방법

#@ 및 #@@ 등으로 표시된 텍스트 블록에서 일부 정보를 추출하려고 합니다. 예제 파일과 함께 아래 명령을 사용하면 작동하지만 -e로 연결하려고 하면 예상대로 작동하지 않습니다.

현재 명령(이상적이지 않음)

sed -n "/^#@/,/#@@/p" file | sed 's/[#@]*//'

재설계된 명령(작동하지 않음)

sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file

원하는 출력

text title
text line
text line

파일 형식

#
#
#@ text title
#  text line
#  text line
#@@
#

내가 뭘 잘못했나요?

답변1

주문하다

sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file

파일 -en에 표현식을 적용하려고 하면 오류가 발생할 수 있습니다 . 다른 옵션과 결합 하려면 다음과 같이 표현식 매개변수를 like 뒤에 넣거나 완전히 분리해야 합니다.n/^#@/,/#@@/p-e-e-ne "/^#@/,/#@@/p"-n -e "/^#@/,/#@@/p"

그런데 대체 명령을 적용하려는 것 같습니다.지정된 라인으로그리고그 다음에실제로는 표현식인 이를 인쇄하세요.

$ sed -n '/^#@/,/#@@/s/^#@*//p' file
 text title
  text line
  text line

선행 공백을 제거하려면 다음을 수행하십시오.

$ sed -n '/^#@/,/#@@/s/^#[@ ]*//p' file
text title
text line
text line

관련 정보