私のデータ:
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.
\item
sed
- 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
そうでない場合は、sed
Perlの「短絡モード」がこの目的に適しています。から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