YAML 앞의 일부 특정 줄을 제거하고 싶습니다.
---
Author: aaaa
Title: bbbb
Time: cccc
Place: dddd
...
이전 콘텐츠에서 "제목:" 및 "위치:"가 포함된 행만 삭제하고 싶다고 가정해 보겠습니다.
이 단어가 포함된 다른 줄을 삭제하지 않으려면 이전 단어만 검색해야 합니다. 또한 모든 솔루션에서는 행 번호를 사용하지 않고 실제 단어를 선택 기준으로 사용하는 것이 바람직합니다.
어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.
내 연구에는 다음이 포함됩니다.
이것- 한 번에 여러 단어 삭제
이- 파일의 특정 영역 선택
답변1
YFM
( YAML front matter
) 에는 익숙하지 않지만이 페이지에 따르면그것파일의 첫 번째 콘텐츠여야 하며 세 개의 점선 사이에 설정된 유효한 YAML 형식이어야 합니다.. 이는 파일이 항상 존재하는 ---
경우 로 시작하므로 YFM
다음을 실행할 수 있음을 의미합니다.
sed -n '1{/^---$/!q};1,/^---$/{/^Title: \|^Place: /d};p' infile
즉, 첫 번째 줄이 uit 와 일치하지 않으면 ---
q
두 번째 태그가 두 번째 표현식을 변경하는 경우 이러한 패턴과 일치하는 모든 줄을 삭제합니다( 첫 번째 줄과 다음 줄 일치 사이에 d
나타나는 경우 ) . 그러나 리터럴 포인트와 일치하려면 주의하세요. 예를 들어 일치하려면 또는 )를 사용하여 이스케이프해야 합니다 .1
---
...
sed
...
\.\.\.
\.\{3\}
sed -n '1{/^---$/!q};1,/^\.\.\.$/{/^Title: \|^Place: /d};p' infile
답변2
heemayl의 sed 솔루션 외에도 grep 옵션이 있습니다.
grep -Ev '^Title:|^Place:' file.txt
설명하다:
- grep -v는 Title: 또는 Place:가 포함된 행을 무시합니다.
- grep -E는 두 개의 용어를 쌓습니다.
- ^는 패턴이 줄의 시작 부분에 있어야 함을 의미합니다.