2015-08-28 148 views
0

之前得到匹配的字符串我有日志文件,其中包含格式的日志:grep的:某些字符串

id=tom idfrom=apple 
id=tom777 idfrom=apple 
id=tom 545 idfrom=facebook 
id=tom.232 idfrom=yahoo 

当我做grep -w "tom" myfile,我把他们四个,但我只想要第一个。这尤其困难,因为用户标识符中可能有空格(例如第三个标识符是“tom 545”)。我必须在idfrom之前和id=之后得到字符串,之前或之后没有空白。

我该怎么做?

编辑:我只是希望每一个ID,并不是整条线路,我需要的输出应该是:

tom 
tom777 
tom 545 
tom.232 
+0

请添加所需的输出为输入您的问题样本。 – Cyrus

+1

@Cyrus对不起,我忘记了,已经编辑。 – brest1007

回答

1

随着GNU grep来获得之间的部分 “ID =” 和 “idfrom”:

grep -Po '(?<=id=).*(?= idfrom)' file 

输出:

 
tom 
tom777 
tom 545 
tom.232 
0

我创建了一个bash脚本,基本上只有一个参数和日志文件中搜索它。如果您通常在进行这种类型的搜索,则可以将id =和idfrom =添加到搜索字符串中。

#!/bin/bash 
if [[ $1 ]]; then 
     echo "looking for: '$1'" 
     grep "id=$1 idfrom=" logfile 
else 
    echo "enter parameter to search for, in quotes if contains a space" 
fi 

那么你可以使用它像这样:

> ./search.sh tom 
looking for: 'tom' 
id=tom idfrom=apple 

> ./search.sh "tom 545" 
looking for: 'tom 545' 
id=tom 545 idfrom=facebook 

> ./search.sh tom.232 
looking for: 'tom.232' 
id=tom.232 idfrom=yahoo