この段落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
  • 2番目は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.  [...]

したがって-00、Perlを使用すると、「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最初の代替演算子は文字列と一致するすべての行を置き換え\item、2番目の代替演算子は各大文字の前に改行文字を追加してからスペースを追加します。

答え4

awk

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

行がA、B、C、D、E、またはM(メインの場合)で始まる場合、その行と追加の1つが印刷されます。\n行が「Question」で始まる場合。\item

関連情報