2017-11-24 21 views
1

、交換しようとして期待通りに動作しない "/データ/ kollman/appion/*//顕微鏡写真relion" "顕微鏡"sedのワイルドカードが

sed -i 's/\/data\/kollman\/appion\/.*\/relion\/micrographs/micrographs/g' micrographs_all_gctf.star 

各行は2つの修正を必要としています。これに変えることにする

/data/kollman/appion/17nov14d/relion/micrographs/00001_nonDW.mrc /data/kollman/appion/17nov14d/relion/micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875 74.539665 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.032973  3.656274 
/data/kollman/appion/17nov14d/relion/micrographs/00002_nonDW.mrc /data/kollman/appion/17nov14d/relion/micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453 48.760956 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.034282  3.727132 

ニーズ:

micrographs/00001_nonDW.mrc micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875 74.539665 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.032973  3.656274 
micrographs/00002_nonDW.mrc micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453 48.760956 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.034282  3.727132 

ではなく、私は取得していた結果がこれです:

micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875 74.539665 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.032973  3.656274 
micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453 48.760956 120.000000  2.120000  0.200000 87500.000000 14.000000 -0.034282  3.727132 

の問題は、私は道のようですここでワイルドカードを使用します。私はそれを持っている必要があります。なぜなら、このコマンドはそのようなすべてのフォルダ構造に一般化できるように意図されているので、フォルダ構造のその部分は常に異なってくるからです。アスタリスクは日付のためのもので、常に変更されます。

とにかく、ワイルドカードは日付を予想どおりに置き換えますが、日付を超えて伸びているように見え、置き換えが必要な2番目のインスタンスに移動します。その結果、各行でファイル構造の1つのエントリが削除されます。

答えて

0

ワイルドカード.*は、/relion/micrographsの2番目のインスタンスまでのすべての文字と一致しています。より決定論的なパターンが必要です。また

、あなたは各/をエスケープする必要がないように異なるのsed表現区切り文字を使用します。

sed -E 's#/data/kollman/appion/[^ ]+/relion/micrographs#micrographs#g' file 
  • 文字クラス[^ ]は、我々は唯一の非空白文字にマッチし、防ぐことを確認しますすべての文字を/relion/micrographsの2番目のインスタンスまで呑み込むことができます。