0

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

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

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

4

6 回答 6

2

你可以这样做:

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

如果你不想包含id=你可以使用正面后视的部分:

$ grep -Po '(?<=id=)[^;]*' file
于 2013-03-11T14:19:29.043 回答
0

尝试 :

grep -Po "(?<=id=)[^;]*" file
于 2013-03-11T14:19:38.293 回答
0

通过 grep:

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

通过 awk:

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

编辑:查看 sudo_O 的后视答案。IMO,这更符合您的问题。

于 2013-03-11T14:20:54.513 回答
0

你可以试试这个awk。如果每行有多个 id= 条目,它也应该工作,并且它不会给出误报...;pid=blabla;...

awk '/^id=/' RS=\; file
于 2013-03-11T22:06:25.367 回答
0

尝试以下操作:

grep -oP 'id=\K[^;]*' file
于 2013-03-11T22:10:08.260 回答
0
perl -lne 'print $1 if(/id=([^\;]*);/)' your_file

测试:

> echo "tag=yyyyy;id=xxxxx;db_ref=zzzzz; "|perl -lne 'print $1 if(/id=([^\;]*);/)'
xxxxx
>
于 2013-03-12T10:57:21.173 回答