このようなファイルがあります。
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:]]