특정 줄을 열거하는 방법을 알고 싶습니다. 이 경우에는 괄호가 있는 줄 뒤의 줄만 나열합니다.
원본 파일: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 라인은 그대로 출시됩니다.
- 자동 인쇄 옵션은 결국 해당 행을 인쇄합니다.