이 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
각 줄 끝에 정확히 동일한 코드입니다.
나는 여기서 무슨 일이 일어나고 있는지 이해하지 못한다.
^$
일치해야합니까?
이것을 시도하십시오 (빈 줄 제거가 이제 첫 번째 위치에 있음).
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 뒤에 오는 모든 명령이 실행되지 않음을 의미합니다.
에서 여기
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다