真珠

真珠

完了する必要がある作業を含む会議契約があります。各契約はキーワードで始まり、次のように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グループ化を使用できることに注意してください。

移行されたポイントhttps://stackoverflow.com/questions/14679479/how-can-write-the-multiple-files-with-sed-from-pattern-matched

おすすめ記事