1

私は行を持っています:

<random junk>TYPE=snp;<more random junk>

TYPE=の末尾と theの間のすべてを返す必要があります;(この場合snpは、多数のテキスト文字列のいずれかである可能性があります。

さまざまな sed / awk ソリューションを試しましたが、うまくいかないようです。これは簡単な問題だと思いますので、申し訳ありません。

4

5 に答える 5

4

GNU grep が必要です:

grep -Po '(?<=TYPE=)[^;]+'

意味: 「TYPE=」の前に、セミコロン以外の文字をいくつか見つけます

于 2012-09-21T00:05:10.520 に答える
4

これはうまくいくようです:

sed 's/.*TYPE=\(.*\);.*/\1/'

編集:

ああ、ランダム ジャンクにセミコロンが含まれている可能性があります。これを試して:

sed 's/.*TYPE=\([^;]*\);.*/\1/'
于 2012-09-20T23:31:53.390 に答える
3

を使用した片道GNU sed

sed -r 's/.*TYPE=([^;]+).*/\1/' file.txt
于 2012-09-20T23:30:54.513 に答える
2

このawkにもタグを付けたので:

$ text='<random junk>TYPE=snp;<more random junk>'
$ echo "$text" | awk -FTYPE= '{sub(/;.*/,"",$2); print $2}'
snp
$ text='foo=bar;baz=fnu;TYPE=snp;XAI=0;XAM=0'
$ echo "$text" | awk -FTYPE= '{sub(/;.*/,"",$2); print $2}'
snp

(変数を使用して行が折り返されないようにするだけです。)

variable=valueまたは、これを単なるテキスト文字列ではなくペアのセットとして解析するには:

$ echo "$text" | awk -vRS=";" -F= '$1=="TYPE" {print $2}'
snp
于 2012-09-22T12:14:32.480 に答える
0

必要に応じて、純粋なbashでこれを行うこともできます。

$ t="red=blue;TYPE=snp;XAI=0.0037843;XAM=0.0170293;XAS=0.013245;XRI=0;XRM=0"
$ t=${t#*TYPE=}
$ t=${t%%;*}
$ echo $t
snp
于 2012-09-22T12:40:38.697 に答える