完了する必要がある作業を含む会議契約があります。各契約はキーワードで始まり、次のようにTODO
終了します。D/nameOfAssignee
Meeting 2017/03/22
some stuff
TODO task for philipp D/philipp
some more stuff
TODO task for jane D/jane
TODO task for joe D/joe
some other stuff TODO Another
task for Philipp
D/philipp
still
more
stuff
TODO Yet another
task for jane D/jane
今ファイルを取得したいですphilipp.txt
。
task for philipp
Another task for Philipp
そしてファイルjane.txt
:
task for jane
Yet another task for jane
そしてファイルjoe.txt
:
task for joe
私は以下を使ってこれを行いますsed
。
sed -n '/TODO/!d
:l
/D\//bw
N
bl
:w
s/.*TODO *//
s/\n/ /g
s_ *D/philipp__w philipp.txt
s_ *D/joe__w joe.txt
s_ *D/jane__w jane.txt
' tasks.txt
これはうまくいきますが、可能なすべてのアロケータに対してスクリプトで同じ行を使用する必要があるため、迷惑になります。文書内のファイル名に正規表現一致部分文字列を使用する方法が見つかりません。たとえば、次のようになります。
s_ *D/\(.*\)__w \1.txt
(これはうまくいきません!すべてが名前付きファイルに書き込まれます\1
!)
2番目の実行で使用できるスクリプトを最初に生成し、各担当者に対してこれらの行を自動的に生成する別の方法はありますか?
sed
それとも私がこのようなことをする必要がある間違ったツールですかpython
?
ベストアンサー1
必要なことを行う方法はありますが、これはGNU sedでのみ機能します。
sed -rn '/TODO/!d
:l
/D\//bw
N
bl
:w
s/.*TODO *//
s/\n/ /g
s_(.*) *D/(.*)_echo \1 >> \2.txt_e
' tasks.txt
その秘密は、e
パターン空間の内容をシェルコードとして実行する置換コマンドの特別なスイッチにあります。また、-r
グループ化を使用できることに注意してください。