sed を使用したキャプチャ

sed を使用したキャプチャ

このようなファイルがあります。

x   +   chrX    15362   15364   +   100(3)  *(0)    *(0)    *(0)    100(5)  *(0)    100(1)
y   +   chrX    153626  153626  +   100(80) 98.56(79)   100(40) 100(47) 100(88) 4(23)

括弧内の値をキャプチャして、出力が次のように見えるように印刷したいと思います。

x   +   chrX    15362   15364   +   3   0   0   0   5   0   1
y   +   chrX    153626  153626  +   80  79  40  47  88  23

私はこれをsedでしたい。

このようにしてみましたが、うまくいきません

sed -r 's/^.*\((\d+)\)/\1/g'

また、次のような出力を得るために括弧内のすべての項目(括弧を含む)を削除するにはどうすればよいですか?

x   +   chrX    15362   15364   +   100 *   *   *   100 *   100
y   +   chrX    153626  153626  +   100 98.56   100 100 100 4

答え1

$ sed 's/([^)]*)//g' file
x   +   chrX    15362   15364   +   100  *    *    *    100  *    100
y   +   chrX    153626  153626  +   100 98.56   100 100 100 4

sedここでは、入力から角かっこを削除するために使用します。この式は、開き([^)]*)括弧、右以外の括弧文字(数字など)、最後に閉じた括弧と一致します。ここでも([0-9]*)使用できます。

$ sed 's/[^[:blank:]]*(\([^)]*\))/\1/g' file
x   +   chrX    15362   15364   +   3  0    0    0    5  0    1
y   +   chrX    153626  153626  +   80 79   40 47 88 23

ここでは、括弧の前のビットと括弧自体を削除し、すべてを括弧内にあるものと置き換えます。(matchの前に来るもの[^[:blank:]]*、つまり空白ではない文字の数に関係なく、最初のコマンドと同じ式が続きますが、および間sedの内容をキャプチャします。キャプチャされた文字列は、コマンドの代替部分で引用されます。()\1


注文、

sed -r 's/^.*\((\d+)\)/\1/g'

\dPCRE(Perlに似た正規表現)なので動作しません。または\dに置き換えると、行全体が最後の括弧内の数字に変わるため、これはうまく機能しません。[0-9][[:digit:]]

答え2

この試み:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'

  • ゼロ個以上の空白以外の文字を探して、その後に開く括弧、数字(キャプチャ)、閉じ括弧が続きます。
  • キャプチャされた数字のみを置き換える
  • グローバルに実行
  • \d拡張正規表現ではなく、PCRE構文です。

審美的な側面のために出力をパイプします| column -t

関連情報