sed は整数の後の区切り文字を置き換えます。

sed は整数の後の区切り文字を置き換えます。

ファイル名が与えられたら、chrIII:834297-835206:-.miRanda.txt最小BED形式(タブ区切りデータ)を生成したいと思います。

chrIII  834297  835206  -

整数の後に最初の区切り文字をsed変換するように言うのが難しいです(つまり、2番目の発生時にチェーン情報を混乱させないでください)。-私がやろうとしていることはecho *.miRanda.txt | sed 's/.miRanda.txt//g' | sed 's/:/\t/g; s/[0-9]-/\t/g'間違っていて、誰かが助けることができれば幸いです。 (私は[0-9]仕事が必要なパターンがあると思いますが、用語を知らず、これをグーグルするのに苦労しています。)

ソリューションは必ずしも要件ではありませんsed

ベストアンサー1

これは1つの方法です(GNUsedまたは他のサポートされている方法を使用-E)。

$ echo chrIII:834297-835206:-.miRanda.txt |     
    sed -E 's/^(chr[^:]+):([0-9]+)-([0-9]+):([^.]+).*/\1\t\2\t\3\t\4/'
chrIII  834297  835206  -

.これは、4番目のフィールド(ベッドファイルの名前)としてaを持つことができないと仮定します。これが安全な仮定ではなく拡張機能を使用する必要がある場合は、次のことができます。

$ echo chrIII:834297-835206:-.miRanda.txt | 
    sed -E 's/^(chr[^:]+):([0-9]+)-([0-9]+):(.+)\.miRanda.txt/\1\t\2\t\3\t\4/'
chrIII  834297  835206  -

また、最低ベッドタイプには4番目のフィールドはまったく必要ありません。有効なベッドファイルは次のとおりです。

chrIII  834297  835206

最後に、あなたのアプローチはほぼ必ず必要以上に少し複雑ですが。最後の整数はs/[0-9]-/\1\t/数値の合計をタブに置き換えたため、最初から削除しました。-これは本質的にあなたのコマンドと同じですが、この問題を説明し、不要なグローバルg演算子を削除するためにわずかに修正されました。

$ echo chrIII:834297-835206:-.miRanda.txt | 
    sed 's/\.miRanda.txt//' | 
        sed -E 's/:/\t/g; s/([0-9])-/\1\t/'
chrIII  834297  835206  -

なぜこれが失敗したと言うのかわかりません。

おすすめ記事