특정 패턴을 따르고 문자로 시작하는 모든 줄을 찾습니다.

특정 패턴을 따르고 문자로 시작하는 모든 줄을 찾습니다.

그래서 다음과 같이 _posts제목에 메타데이터 YAML이 포함된 Jekyll 게시물이 많이 있습니다 .categories

---
excerpt: "I am an excerpt"
categories:
- tips
- programming
- howto
- another-tag
layout: blog
title: I am a Page Title
created: 1267026549
permalink: blog/27-05-2017/clean-url-goes-here
---

categories그래서 줄을 찾고 n( ) 뒤에 줄을 표시하기 위해 grep하는 방법을 알고 있습니다 ... 하지만 분명히 각 게시물의 번호가 다르기 때문에 로 시작하는 -An다음 줄을 모두 표시하도록 하는 방법이 있습니까 ? -아마도 모든 라인은 layout?

답변1

권장되는 텍스트 처리 도구는 입니다 awk.

이 시도:

awk '/categories/,/layout/ { if (!/layout/) print }' your_file

이 명령은 줄 자체가 없을 categories때까지 모든 것을 인쇄합니다.layout

산출:

categories:
- tips
- programming
- howto
- another-tag

categories과 사이에만 항목을 갖고 싶다면 다음과 같이 layout조건에 두 번째 패턴을 추가하면 됩니다 if.

awk '/categories/,/layout/ { if (!/layout/ && !/categories/) print }' your_file

그러면 출력은 다음과 같습니다.

- tips
- programming
- howto
- another-tag

답변2

pcregrep(Perl 호환 정규식)을 사용할 수 있는 경우 :

pcregrep -M 'categories.*(\n-.*)*' file

또는 예측 어설션을 사용하십시오.

pcregrep -M 'categories(.|\n)*(?=layout)' file

답변3

sed -e '/^categories:/,/^[^-]/!d;//d' yourfile

답변4

awk를 사용하여 이를 수행하는 한 가지 방법은 다음과 같습니다. 머리글 행을 찾으면 인쇄하고 다음 행이 로 시작하는 한 계속해서 다음 행을 가져와서 인쇄합니다 -.

awk '$0=="categories:" { do { print; getline } while (/^-/) }'

관련 정보