이 단락 SED를 MCQ 형식으로 변환하는 방법은 무엇입니까?

이 단락 SED를 MCQ 형식으로 변환하는 방법은 무엇입니까?

내 데이터:

Question Nr.  311
Main proteins are in the lorem ipsun
A Lorem RNA test
B Cells
C Metoclom
D Cells
E Muscles

Question Nr.  312
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles

...

원하는 형식:

\item 
Main proteins are in the lorem ipsun

A Lorem RNA test

B Cells

C Metoclom

D Cells

E Muscles

\item
Main proteins are in the lorem ipsun

A Lorem

B Cells

C Metoclom

D Cells

E Muscles

\item ...

각 옵션을 새 줄에 표시할 계획입니다.

내 시도:

sed s/Question Nr.*/\item/g

이것은 모두를 다음으로 대체해야합니다질문 번호 [어떤 질문이든] - 문제는 뒤에 오는 것을 감지하는 것입니다. 왜냐하면 많은 옵션이 있을 수 있지만 옵션은 \n\n줄 바꿈으로 끝나기 때문입니다.

반단계 문제는 다음과 같습니다.

\item 
Main proteins are in the lorem ipsun
A Lorem RNA test
B Cells
C Metoclom
D Cells  
E Muscles

\item 
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells  
E Muscles

기타 과제

  • 단어를 대문자로 표기하세요.HIV그리고RNA옵션에서 아래의 일부 솔루션은 뒤에 빈 줄을 삽입합니다.안녕하세요그리고수석 간호사

sed내가 원하는 출력을 어떻게 전달/가져오나요 perl?

답변1

그리고 sed:

sed 's/^Question Nr\..*/\\item/; s/^\([A-Z] .*\)/\n\1/' file
  • 첫 번째 명령을 질문 과 유사한 명령 으로 s///바꾸십시오 .Question Nr.\itemsed
  • 두 번째는 A대문자로 시작하는 줄을 from 으로 바꾸지 Z만, 그 뒤에 공백이 오는 줄만 바꿉니다. 전체 행은 그 자체로 \1개행 문자 로 대체됩니다 \n.

산출:

\item
Main proteins are in the lorem ipsun

A Lorem

B Cells

C Metoclom

D Cells

E Muscles

\item
Main proteins are in the lorem ipsun

A Lorem

B Cells

C Metoclom

D Cells

E Muscles

답변2

tr+를 사용하는 또 다른 방법 sed:

tr -s \\n <infile | sed '$!G;s/Question Nr.*/\\item/'

tr모든 줄 바꿈을 누른 다음 sed마지막 줄을 제외한 모든 줄에 공간 보존 내용(빈 줄 바꿈)을 추가하고 로 바꿉니다 Question Nr.*. \item이 방법을 사용하면 파일을 내부에서 편집할 수 없습니다. tr정규식보다 빠르기 때문에 여기를 선택했습니다 ( 솔루션만큼 깨끗 sed하지는 않더라도 ).sed

답변3

그렇지 않다면 sedPerl의 "단락 모드"가 이 목적에 적합합니다. 에서 man perlrun:

   -0[octal/hexadecimal]
        specifies the input record separator ($/) as an octal or
        hexadecimal number.  [...]

        The special value 00 will cause Perl to slurp files in paragraph
        mode.  [...]

따라서 -00Perl을 사용하면 "line"을 줄 종결자로 사용되는 단락으로 정의하도록 지시됩니다 \n\n. 이를 염두에 두고 다음을 수행할 수 있습니다.

$ perl -00pe 's/Question.*/\\item/; s/[A-Z] /\n$&/g;' file
\item
Main proteins are in the lorem ipsun

A Lorem

B Cells

C Metoclom

D Cells

E Muscles

\item
Main proteins are in the lorem ipsun

A Lorem

B Cells

C Metoclom

D Cells

E Muscles

Question첫 번째 대체 연산자는 string 과 일치하는 모든 줄을 대체하고 \item, 두 번째 대체 연산자는 각 대문자 앞에 개행 문자를 추가한 다음 공백을 추가합니다.

답변4

지금 awk:

awk '$1 ~ /[ABCDEM]/ {print $0"\n"} $1 ~ /Question/ {print "\\item"}' inputfile

줄이 A, B, C, D, E 또는 M(Main의 경우)으로 시작하면 해당 줄과 추가 1개가 인쇄됩니다 . \n줄이 "Question"으로 시작하면 .\item

관련 정보