私は行を持っています:
<random junk>TYPE=snp;<more random junk>
TYPE=
の末尾と theの間のすべてを返す必要があります;
(この場合snp
は、多数のテキスト文字列のいずれかである可能性があります。
さまざまな sed / awk ソリューションを試しましたが、うまくいかないようです。これは簡単な問題だと思いますので、申し訳ありません。
GNU grep が必要です:
grep -Po '(?<=TYPE=)[^;]+'
意味: 「TYPE=」の前に、セミコロン以外の文字をいくつか見つけます
これはうまくいくようです:
sed 's/.*TYPE=\(.*\);.*/\1/'
編集:
ああ、ランダム ジャンクにセミコロンが含まれている可能性があります。これを試して:
sed 's/.*TYPE=\([^;]*\);.*/\1/'
を使用した片道GNU sed
:
sed -r 's/.*TYPE=([^;]+).*/\1/' file.txt
この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
必要に応じて、純粋な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