결과

결과

특정 줄을 열거하는 방법을 알고 싶습니다. 이 경우에는 괄호가 있는 줄 뒤의 줄만 나열합니다.

원본 파일:file.txt

TITLE: hello world 
SUBTITLE: document about hello world    

[CONTENT 1]   
That's a line   
Another one   
Row    

[EXAMPLE]    
Example line   

[CONTENT 2]   
A  
B   
C   

Text, text, text....

원하는 결과:file.txt

TITLE: hello world 
SUBTITLE: document about hello world    

[CONTENT 1]   
1 That's a line   
2 Another one   
3 Row    

[EXAMPLE]    
5 Example line   

[CONTENT 2]   
6 A  
7 B   
8 C   

Text, text, text....

답변1

해결책:

awk '/^\[.+\]/{ f=1 }f && $0~/^\w/{ $0=++c FS $0 }!NF{ f=0 }1' file
  • /^\[.+\]/{ f=1 }- 괄호를 사용하여 줄을 일치시키고 f플래그로 표시합니다.

  • f && $0~/^\w/{ $0=++c FS $0 }- "괄호 포함" 줄 뒤의 줄에 카운터 값을 추가합니다.

  • !NF{ f=0 }- 빈 줄과 아래 줄은 무시합니다. ( f=0- 역방향 동작을 나타내는 리셋 플래그)


산출:

TITLE: hello world 
SUBTITLE: document about hello world    

[CONTENT 1]   
1 That's a line   
2 Another one   
3 Row    

[EXAMPLE]    
4 Example line   

[CONTENT 2]   
5 A  
6 B   
7 C   

Text, text, text....

답변2

perl -pe 's/^/++$a.$"/e if /^\[/ ... /^$/ and /^(?!\[)./' file.txt

결과

TITLE: hello world
SUBTITLE: document about hello world

[CONTENT 1]
1 That's a line
2 Another one
3 Row

[EXAMPLE]
4 Example line

[CONTENT 2]
5 A
6 B
7 C

Text, text, text....

설명하다

  • -p파일을 한 줄씩 처리하는 옵션 + 자동 인쇄 활성화.
  • s/^/.../e카운터와 공백을 앞에 추가합니다( $"기본값 = 목록 구분 기호 = 공백).
  • /e바꾸기 명령에 대한 수정자는 RHS를 평가할 Perl 코드로 처리하고 결과를 대체 결과로 배치합니다.
  • 교체는 다음 정규식을 선택한 경우에만 발생합니다.
    • /^\[/ .. /^$/=> 여는 대괄호로 시작하는 줄부터 시작하는 줄 범위를 선택하고, 빈 줄이 발견되면 범위를 종료합니다.
    • 범위 경계를 거부하는 행을 선택하여 범위를 더욱 구체화합니다. 즉, 하나 이상의 문자가 있고 해당 행이 여는 대괄호로 시작하지 않는 행과 일치합니다. 따라서 이 두 가지 조건이 충족되어야만 교체가 이루어지며 OTW 라인은 그대로 출시됩니다.
  • 자동 인쇄 옵션은 결국 해당 행을 인쇄합니다.

관련 정보