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

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

그래서 다음과 같이 _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-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 (/^-/) }'

관련 정보