我的日志文件包含格式的日志:
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
答案 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