ed 명령: 첫 번째 줄부터 첫 번째 빈 줄까지 삭제

ed 명령: 첫 번째 줄부터 첫 번째 빈 줄까지 삭제

나는 교과서에서 이 코드를 발견했습니다. 책에는 1,/^[ ]*$/d "1번째 줄부터 첫 번째 빈 줄까지 삭제"라는 의미만 나와 있습니다. 각 문자는 구체적으로 무엇을 의미하나요?

ed $1 << EOF
    1,/^[ ]*$/d
    w
    q
EOF

답변1

1,/.../는 첫 번째 줄부터 사이의 패턴과 일치하는 줄까지의 범위를 의미합니다 /.

/^[ ]*$/0 또는 줄의 [ ]*처음 ^부터 끝까지 공백이 포함된 줄과 일치합니다 .$
문제의 코드가 의도적인 것인지, 책의 정확한 복사본인지는 확실하지 않습니다. 단일 공간 주변의 괄호는 필요하지 않습니다. 아마도 원저자는 괄호 사이에 공백과 탭 문자를 두기를 원했을 것입니다. 이를 문자 클래스로 대체할 수 있습니다 [[:blank:]].

d줄을 삭제하는 명령입니다

w파일을 쓰세요

q편집자를 그만둬라

ed해당 명령은 다음을 통해 전송됩니다.여기 문서, 로 표시됩니다 << EOF. 문자열 은 아래의 EOF다른 EOF네 줄과 쌍을 이루는 반임의적인 이름입니다. 따옴표 없이 놔두면 EOF중간 줄의 모든 변수가 확장된다는 의미입니다.

여기서 주목해야 할 또 다른 사항은 예제의 인용되지 않은 입니다 $1. 명령 ed/스크립트는 첫 번째 위치 매개변수(스크립트 또는 함수에 대한 인수)에 대해 실행됩니다.추가 공백 분할 및 파일 이름 생성이 적용됩니다.. 그 주장은 실제로 인용되어야 한다. 자세한 내용은 다음을 참조하세요.쉘 스크립트가 공백이나 기타 특수 문자로 인해 막히는 이유는 무엇입니까?그리고bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버린 경우의 보안 영향.

답변2

명령 및 입력

$1편집할 파일 이름이고 EOF 사이의 모든 내용은 에 대한 명령입니다 ed.

블로우 바이 블로우 설명1,/^[ ]*$/d

  • 1,줄부터 시작하다1 이 경우 검색 문자열이 처음 나타날 때까지 계속됩니다.
  • /문자열을 검색하려고 한다는 것을 나타냅니다.
  • ^파일의 줄 시작 부분과 일치시키려는 것을 나타냅니다.
  • [많은 문자를 지정하려고 함을 나타냅니다.
  • ' ' 공백과 일치시키려고 합니다. 일반적으로 여기에는 더 많은 문자가 있습니다.
  • ]문자 지정 완료
  • *0개 이상의 공백(또는 사이의 모든 문자 []) 과 일치시키려고 합니다.
  • $파일의 줄 끝까지
  • /검색 종료
  • d줄을 삭제하다

그런 다음 다음 줄에서 w변경 사항을 쓰고 q종료됩니다 ed.

효과

파일의 ( $1) 줄 1이 비어 있거나 공백만 있으면(탭 없음) 제거됩니다.

관련 정보