基本的に、私は非常に大きなテキストファイルを持っており、各行には
tag=yyyyy;id=xxxxx;db_ref=zzzzz;
私が望むのはIDをgrepすることですが、IDは長さと形式が変わる可能性があります.grep -oを使用してから「id =」にgrepを使用し、その後に続くすべてをセミコロンまで抽出できるかどうか疑問に思っていましたか?
基本的に、私は非常に大きなテキストファイルを持っており、各行には
tag=yyyyy;id=xxxxx;db_ref=zzzzz;
私が望むのはIDをgrepすることですが、IDは長さと形式が変わる可能性があります.grep -oを使用してから「id =」にgrepを使用し、その後に続くすべてをセミコロンまで抽出できるかどうか疑問に思っていましたか?
あなたがすることができます:
$ grep -o 'id=[^;]*' file
そして、その部分を含めたくない場合はid=
、肯定的な後読みを使用できます。
$ grep -Po '(?<=id=)[^;]*' file
grep経由:
grep -o 'id=[^;]*'
awk経由:
awk -F';' '{ print $2}' testlog
id=xxxxx
編集:後読みについては、sudo_Oの回答を参照してください。それはあなたの質問の要点です、IMO。
この awk を試すことができます。また、1 行に複数の id= エントリがあり、誤検知が発生しない場合にも機能するはずです。...;pid=blabla;...
awk '/^id=/' RS=\; file
次のことを試してください。
grep -oP 'id=\K[^;]*' file
試す :
grep -Po "(?<=id=)[^;]*" file
perl -lne 'print $1 if(/id=([^\;]*);/)' your_file
テスト済み:
> echo "tag=yyyyy;id=xxxxx;db_ref=zzzzz; "|perl -lne 'print $1 if(/id=([^\;]*);/)'
xxxxx
>