"class"로 시작하는 알 수 없는 행 수를 포함하는 파일이 있습니다. "class"로 시작하는 처음 두 줄을 다른 것으로 바꾸고 해당 두 줄만 유지하고 나머지는 삭제하고 싶습니다.
예:
school
class A
class B
class C
class D
classroom
원하는 출력:
school
class X
class Y
classroom
sed를 보고 있는데 좋은 해결책을 찾을 수 없습니다. 어떤 조언이라도 대단히 감사하겠습니다!
답변1
사용GNU sed정규식 패턴을 확장하여 -E
예약된 공간을 카운터로 사용할 수 있습니다.
sed -Ee '
/^class(\s|$)/!b
G
/\n{3}/d
/\n{2}/s/.*/class Y/
/\n{1}/s/.*/class X/
p;z;H;d
' file
간략한 설명:
- 사용된 명령 편집
sed
:b G z h H d s/// p
- 이에 대해서는 GNU sed 매뉴얼을 참조하십시오.
- 아이디어는 단어 클래스로 시작하지 않는 모든 줄을 계속 인쇄하는 것입니다.
- 이제 계급선에 대해서는 한 번 본 것인지, 두 번 본 것인지, 두 번 이상 본 것인지 세 가지를 명확히 해야 합니다.
- 우리는 예약된 공간의 내용을 패턴 공간에 연결하고 줄 바꿈에 세심한 주의를 기울입니다.
- 개행 문자가 3개 발견되면 => 2번 이상 발생합니다. 이 줄을 즉시 삭제하세요. 더 이상 처리되지 않습니다.
- 2개의 줄 바꿈이 발견되면 => 두 번째로 표시되므로 변경하세요.
- 첫 만남에서는 또 다른 변화도 생겼다.
- 마지막 두 가지 경우 중 하나의 경우 예약된 공간을 늘리십시오.
와 함께앗실용성은 간단합니다.
awk '
BEGIN {
a[1]="class X"
a[2]="class Y"
}
$1 == "class" {
if ( k++ < 2 ) {
$0 = a[k]
} else { next }
}1
' file
산출:
school
class X
class Y
classroom