
이 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$
Hex 편집기를 사용하여 빈 줄을 검사하면 여기에 포함된 것은 모두 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 뒤에 오는 모든 명령이 실행되지 않음을 의미합니다.
~에서여기