*에서 빈 줄까지 알 수 없는 개수의 줄 삭제

*에서 빈 줄까지 알 수 없는 개수의 줄 삭제

예전에 이 포럼을 이용하다가 이제 막 가입했어요! 비슷한 질문을 보았지만 지금까지 아무것도 작동하지 않았습니다(주로 sed를 사용함). 파일에서 별표(*)의 모든 인스턴스를 찾아 빈 줄에 도달할 때까지 별표와 그 뒤의 모든 항목을 삭제하고 싶습니다. 예를 들어:

*252
253
254
255
(blank line here)

또는

*261
265
(blank line here)

각 데이터 블록의 길이는 다양합니다. 그런 다음 출력을 새 파일로 이동하고 싶습니다. 어떤 아이디어가 있나요?

답변1

*다음 빈 줄이 포함된 줄에서 제거하려면 다음을 사용하세요.

sed '/[*]/,/^$/d' filename

노트:

  1. *정규식 활성 문자이고 리터럴만 일치시키려고 하므로 *이스케이프해야 합니다 . 이는 위에 표시된 대로 *수행할 수 있습니다 .\*[*]

  2. ^빈 줄을 일치시키려면 시작(으로 표시됨)과 끝(으로 표시됨) 사이에 문자가 없는 줄이 필요합니다 $. 따라서 ^$빈 줄과 일치합니다.

  3. /[*]/,/^$/*범위입니다. 빈 줄을 포함하는 줄로 시작 하고 빈 줄로 끝나는 줄 집합과 일치합니다 .

  4. d범위의 모든 줄을 삭제하도록 sed에게 지시합니다.

위의 코드는 표준 출력으로 출력됩니다. 현재 위치에서 파일을 변경하려면 다음을 사용하세요.

sed -i.bak '/[*]/,/^$/d' filename

다음 예제 파일을 고려해보세요.

$ cat filename
*252
253
254
255

OR
*261
265

end

그러면 다음이 생성됩니다.

$ sed '/[*]/,/^$/d' filename
OR
end

관련 정보