Bash - 들여쓰기된 코드 블록을 새 파일로 추출

Bash - 들여쓰기된 코드 블록을 새 파일로 추출

나에겐 무리가 있어로터스 연못다음 형식의 파일:

\score {
  \new StaffGroup = "" \with {
    instrumentName = \markup { \bold \huge \larger "1." }
  }
  <<
    \new Staff = "celloI" \with { midiInstrument = #"cello" }

    \relative c {
      \clef bass
      \key c \major
      \time 3/4

      \tuplet 3/2 4 {
        c8(\downbow\f b c e g e)
      } c'4                                         | %01
      \tuplet 3/2 4 {c,8( b c e f a) } c4           | %02
      \tuplet 3/2 4 { g,8( d' f g f d) } b'4        | %03
    }
  >>
  \layout {}
  \midi {}
}

\relative c {...}해당 청크를 새 파일로 추출하여 다음과 같이 보이도록 하려면 어떻게 해야 합니까 ?

\relative c {
  \clef bass
  \key c \major
  \time 3/4

  \tuplet 3/2 4 {
    c8(\downbow\f b c e g e)
  } c'4                                         | %01
  \tuplet 3/2 4 {c,8( b c e f a) } c4           | %02
  \tuplet 3/2 4 { g,8( d' f g f d) } b'4        | %03
}

이 경우, 압흔을 반드시 수리할 필요는 없습니다. awkOR 작업 이 될까요 csplit? 어떤 모습일까요?

답변1

출력 확장자와 함께 입력 이름을 사용하는 등 출력을 처리하는 방법을 고려할 수 있습니다. 들여쓰기를 변경하는 것은 어렵지 않습니다.

스크립트는 명령줄에 명명된 파일 수와 파일 내의 해당 블록 수를 나열합니다.

예제의 출력은 다음과 같습니다.

Paul--) ./LilyPond Lily.txt
    \relative c {
      \clef bass
      \key c \major
      \time 3/4

      \tuplet 3/2 4 {
        c8(\downbow\f b c e g e)
      } c'4                                         | %01
      \tuplet 3/2 4 {c,8( b c e f a) } c4           | %02
      \tuplet 3/2 4 { g,8( d' f g f d) } b'4        | %03
    }

여기에 스크립트가 있습니다.

Paul--) cat LilyPond
#! /bin/bash

function Relative {

    local AWK='''
BEGIN { reRel = "[\\\\]relative[ ]+c"; }
function cntBrace (tx, Local, n) {
    n += gsub ("{", "{", tx);
    n -= gsub ("}", "}", tx);
    return (n);
}
$0 ~ reRel || nBrace > 0 { print; nBrace += cntBrace( $0); }
'''
    awk -f <( echo "${AWK}" ) "${@}"
}

#### Script Body Starts Here.

    Relative "${@:--}"

관련 정보