sed가 빈 줄을 삭제하지 않는 이유는 무엇입니까?

sed가 빈 줄을 삭제하지 않는 이유는 무엇입니까?

이 sed 명령이 빈 줄을 삭제하지 않는 이유는 무엇입니까?

sed -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" -e '/^$/d' <<< $myvar

아무것도 하지 않는 것처럼 보이는 빈 줄을 제거하는 데 사용되는 마지막 부분 -e '/^$/d'를 제외하고는 이 명령으로 모든 것이 잘 작동합니다. 내 콘텐츠의 예는 다음과 같습니다.

begin dump

Ctrl_ID:100

이것은 cat -A를 사용하여 보는 것과 동일합니다.

begin dump$
$
Ctrl_ID:100$

16진수 편집기를 사용하여 빈 줄을 검사하면 16진수 값을 가진 문자가 하나만 포함되어 있는 것으로 나타납니다.

0A

각 줄 끝에 있는 코드는 완전히 동일합니다.

나는 무슨 일이 일어나고 있는지 이해하지 못합니다.

^$일치해야 하지 않나요?

답변1

다음을 시도해 보십시오(빈 줄 제거가 이제 첫 번째 위치에 있음).

sed -e '/^$/d' -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" <<< $myvar

빈 줄 제거를 담당하는 부분이 작동하지 않습니다.

-e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D'

더 깊게...

D는 첫 번째 개행(또는 개행이 없는 경우 끝)까지 패턴 공간의 내용을 삭제하고 새 루프를 시작합니다. 후자는 D 자체가 실행되면 sed 프로그램에서 D 이후의 모든 명령이 실행되지 않음을 의미합니다.

~에서여기

관련 정보