다음과 같은 파일이 있습니다.
---
some metadata
...
---
Some real content.
...
Important content.
예상 출력:
Some real content.
...
Important content.
단순화를 위해 /^---$/
헤더 메타데이터 블록의 여는 구분 기호와 닫는 구분 기호를 제외한 다른 곳에서는 엄격한 행이 발생하지 않는다고 가정해 보겠습니다. 도 1에 도시된 바와 같이.
---
참고: 닫는 구분 기호와 콘텐츠의 첫 번째 줄 사이에 새 줄을 여러 개 넣을 수 있습니다. 이 경우 새 줄이 유지되는지 여부는 상관하지 않습니다.
awk
나중에 필요할 때 파일로 더 많은 작업을 수행하는 데 도움이 될 만큼 다재다능하고 강력하다고 생각하기 때문에 이 명령을 사용하는 것이 가장 좋을 것이라고 생각했습니다 .
기반으로이것은 또 다른 유사한 질문에 대한 답변입니다, 나는 성공하지 못한 채 다음을 시도했습니다.
awk '/---/ {s=1} /---/ && s==1 {s=0} !s' $file
두 번째 규칙이 실제로 파일의 첫 번째 줄과 다시 일치하기 때문일까요?
이를 효율적으로 수행할 수 있는 다른 방법이 있습니까 awk
?
답변1
어때요?
awk 'BEGIN { metadata = 0 } /---/ { metadata = !metadata; next } !metadata' FILE
다음 입력을 사용하십시오 FILE
(라인을 더 추가했습니다).
---
some metadata
...
---
Some real content.
...
Important content.
---
some metadata
...
---
1
2
3
다음과 같이 인쇄됩니다.
Some real content.
...
Important content.
1
2
3
귀하의 스크립트:
awk '/---/ {s=1} /---/ && s==1 {s=0} !s' $file
s
먼저 1로 설정했기 때문에 작동하지 않습니다 .
/---/ {s=1}
너곧0으로 설정합니다:
/---/ && s==1 {s=0}
!s
그리고 IOW 인 경우 레코드를 인쇄하므로 !0
하루가 끝날 때 각 줄을 인쇄하십시오.
답변2
GNU sed확장 정규식을 사용하여 대시-대시에서 대시-대시로 삭제를 읽습니다.
sed -Ee '
/^-+$/,/^-+$/d
' file
답변3
awk '/^---$/ && s++<2{ next } s>1 && NF' infile
답변4
sed '/metadata/,+2d' filename| sed '/---/d'
입력하다
---
some metadata
...
---
Some real content.
...
Important content.
---
some metadata
...
---
1
2
3
산출
Some real content.
...
Important content.
1
2
3