grep:在某个字符串之前获取匹配的字符串

时间:2015-08-28 13:13:20

标签: linux grep

我的日志文件包含格式的日志:

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

当我做grep -w "tom" myfile时,我有四个,但我只想要第一个。这特别难,因为用户ID中可能有空格(例如,第三个,id是" tom 545")。我必须在idfrom之前和id=之后获得字符串,之前或之后没有空格。

我该怎么做?

编辑:我只想要每个id,而不是整行,我想要的输出应该是:

tom
tom777
tom 545
tom.232

2 个答案:

答案 0 :(得分:1)

使用GNU grep获取“id =”和“idfrom”之间的部分:

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

输出:

tom
tom777
tom 545
tom.232

答案 1 :(得分:0)

我创建了一个bash脚本,它基本上只接受一个参数并搜索logfile。如果您经常进行此类搜索,则可以避免将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