如何grep out可以改变的子串?

时间:2013-03-11 14:15:54

标签: grep

基本上我有一个非常大的文本文件,每行包含

tag=yyyyy;id=xxxxx;db_ref=zzzzz; 

我想要的是grep out id,但id可以改变长度和形式,我想知道是否可以使用grep -o然后grep for“id =”然后提取它之后的所有内容直到分号?

6 个答案:

答案 0 :(得分:2)

你可以这样做:

$ grep -o 'id=[^;]*' file

如果您不想包含id=部分,可以使用正look-behind

$ grep -Po '(?<=id=)[^;]*' file

答案 1 :(得分:0)

尝试:

grep -Po "(?<=id=)[^;]*" file

答案 2 :(得分:0)

通过grep:

grep -o 'id=[^;]*'

通过awk:

awk -F';' '{ print $2}' testlog
id=xxxxx

编辑:请参阅sudo_O对后视的回答。更重要的是你的问题,IMO。

答案 3 :(得分:0)

你可以试试这个awk。如果每行有多个id =条目并且它不会给...;pid=blabla;...

提供误报,它也应该有效
awk '/^id=/' RS=\; file

答案 4 :(得分:0)

尝试以下方法:

grep -oP 'id=\K[^;]*' file

答案 5 :(得分:0)

perl -lne 'print $1 if(/id=([^\;]*);/)' your_file

测试:

> echo "tag=yyyyy;id=xxxxx;db_ref=zzzzz; "|perl -lne 'print $1 if(/id=([^\;]*);/)'
xxxxx
>