如何grep或sed以= user / = Email开头并以&结尾的短语

时间:2016-01-21 12:14:43

标签: bash sed grep

我的。txt文件包含一些用户名和密码。一行f.e

user=testuser&password=somefunnyletters&cookie=true

我需要在没有其余部分的情况下获得 user = 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

有没有可能得到这个

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

和电子邮件= EXAMPLEMAILUSER?

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

这对我有很大帮助;)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用SED执行此操作:

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

找到第一个'&'以及之后的所有内容(s /&。* /)并替换为'empty'(//)