ed 명령: 라인 1부터 첫 번째 빈 라인까지 삭제

ed 명령: 라인 1부터 첫 번째 빈 라인까지 삭제

교과서에서 이 코드를 보았는데, 책에서는 1,/^[ ]*$/d "1번째 줄부터 첫 번째 빈 줄까지 삭제"를 의미한다고 말했습니다. 각 문자의 구체적인 의미는 무엇입니까?

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

답변1

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

/^[ ]*$/[ ]*^줄의 처음부터 끝까지 0 또는 공백이 포함된 줄을 찾습니다 .$
문제의 코드가 의도적인 것인지, 책의 정확한 사본인지는 불분명합니다. 단일 공백 ​​주위에는 괄호가 필요하지 않습니다. 어쩌면 원저자는 문자 클래스로 대체될 수 있는 괄호 사이에 공백과 탭을 원했을 수도 있습니다 [[:blank:]].

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

w파일 쓰기

q편집기 종료

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

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

답변2

명령 및 입력

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

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

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

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

영향

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

관련 정보