csh 스크립트의 sed 호출에서 이벤트를 찾을 수 없습니다.

csh 스크립트의 sed 호출에서 이벤트를 찾을 수 없습니다.

위에 주어진 코드를 시도했습니다중괄호 사이의 텍스트 제거

하지만 sed 이벤트에서는 다른 오류가 발생했습니다.

파일에는 다음이 포함됩니다.

This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.

sed ':again;$!N;$!b again; s/{[^}]*}//g' file

운동 중에 무엇이 잘못될 수 있나요?

실수

N: Event not found.

답변1

히스토리 확장 실행을 !방지하려면 이스케이프해야 합니다 . 작은 따옴표로 작성 csh/tcsh하더라도 여전히 히스토리 확장을 수행합니다.!

노력하다:

sed ':again;$\!N;$\!b again; s/{[^}]*}//g' file

또는 호출할 스크립트를 작성할 수도 있습니다 -f script.sed(읽기sed FAQ).

답변2

잘 모르겠지만 tcsh역사 확장 질문처럼 들립니다. bash작은 따옴표로 히스토리 확장을 방지할 수 있습니다. 그렇지 않을 수도 있습니다 tcsh.

기록 확장을 비활성화할 수 있습니다(하지만 어떻게 해야 할지 모르겠습니다. bash에서 수행합니다 set +H).

또 다른 옵션: 백슬래시 이스케이프가 작동해야 합니다. 노력하다

sed_code=":again;\$\!N;\$\!b again; s/{[^}]*}//g"
sed "$sed_code" file

관련 정보