2016-01-21 94 views
3

结尾。 txt文件与捕获的数据,其中包括一些用户名和密码。一号线f.​​e如何grep或sed一个以= user/= Email开头的短语,并以&

user=testuser&password=somefunnyletters&cookie=true 

我需要得到那句用户= testuser的没有休息。 为了得到这条线我已经使用grep ^user= mylogfile.txt。我试过

egrep -e "user=.*&" mylogfile.txt 

但是得到了同样的结果。

我是bash和grep的新手。你可以帮帮我吗? :)

编辑: 感谢球员的答案 您与sed的解决方案,甚至更好:)

2016-01-19 10:34:53,707 POST Data (www.example.com): 
user=testuser 
2016-01-19 10:35:05,800 POST Data (accounts.google.com): 
Page=SignIn 
2016-01-19 10:35:11,118 SECURE POST Data (accounts.google.com): 
Page=SignIn 
2016-01-19 10:35:24,273 POST Data (mail.example.com): 
username=ACCOUNT2 

有我的log.txt

2016-01-19 10:35:05,800 POST Data (accounts.google.com): 
Page=SignIn&GALX=4sniYBF1KS4&gxf=AFoagUUWrsxLske465iHUiS7iLFTghUUVA%3A1453195970318&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&rm=false&ltmpl=default&scc=1&ss=1&osid=1&checkedDomains=youtube&checkConnection=&pstMsg=1&_utf8=%E2%98%83&bgresponse=%21eXpCtDFcUk0RqTZEOIof1FvHKm8CAAAAfVIAAAAPCgBHGejcPtA_v4HvVc7ixkq7wxLdz6ZvzEljoDpRfUwMD_czUNuCDpeVoBlAC77pd_nqcMFOMx6CkFDSBsZ1oCvv1M2h9WokdDkqANw3H-8BGAog77GOKPHJHR-FDUo5vutu5SKbkioAXvel_pcJOttUSp6glPAFQswWhastRHyyRn9axImbsoKlYsob3h604WklobLZNjQVbf9_cS1jbMQE-XWYBPE1FRXQzQysqKBLGHAmCUHvlaQfxYs1NsxAwmkNLoRBDAefVHTNT4YHqKEJ0LNkun8BnyxKT0jPTj7AebLpRUclWa9jF1FuVuakfi6ZbpqJnLK0XCFyQ8maiHvQh_SraectIJg_n4hBMkQ_riKZtRWPZCghzRS87Q3xezq2l-grUgO-&pstMsg=1&dnConn=&checkConnection=&checkedDomains=youtube&Email=EXAMPLEMAILUSER&Passwd=ewuoieuroiuio&signIn=Sign+in&PersistentCookie=yes&rmShown=1 

的PICE有没有可能性得到这个

2016-01-19 10:35:05,800 POST Data (accounts.google.com): 

和Email = EXAMPLEMAILUSER?

我需要得到Email =,user =和username =。这将是很好得到哪些网站是用户名/电子邮件:)

这将帮助我很多;)

+0

' sed'总是一个选项:'sed's /\&.*$//'filename'。 –

+1

使用现有工具解析查询字符串也是一种选择! –

+0

好的,但我还没有看到一个'grep'的盒子,通常也没有默认安装'sed'。这可能是它被视为*评论*而不是*答案*的原因。 –

回答

3
grep -oP 'user=\K[^&]*' 

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

检查这个例子:

kent$ echo "user=testuser&password=somefunnyletters&cookie=true"|grep -oP 'user=\K[^&]*' 
testuser 

kent$ echo "user=testuser&password=somefunnyletters&cookie=true"|grep -oP '^[^=]*=\K[^&]*' 
testuser 

使用grep进行测试:

kent$ grep --version|head -1 
grep (GNU grep) 2.22 
+0

非常感谢。它显示我需要什么:) 你能解释一下这个'K'怎么工作? – uxez

+0

@uxez'\ K'仅适用于'grep -P(PCRE)',它的工作原理类似于后退,但支持动态长度。 – Kent

0

你可以用SED做到这一点:

sed 's/&.*//' mylogfile.txt 

找到的第一个 '&' 及其之后的所有(S/& * /)和替换 '空'(//)

+0

你的解决方案更好,因为它给了我更多的信息。 – uxez

相关问题