このようなファイルがあります。
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'
\d
PCRE(Perlに似た正規表現)なので動作しません。または\d
に置き換えると、行全体が最後の括弧内の数字に変わるため、これはうまく機能しません。[0-9]
[[:digit:]]
答え2
この試み:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'
- ゼロ個以上の空白以外の文字を探して、その後に開く括弧、数字(キャプチャ)、閉じ括弧が続きます。
- キャプチャされた数字のみを置き換える
- グローバルに実行
\d
拡張正規表現ではなく、PCRE構文です。
審美的な側面のために出力をパイプします| column -t
。