Regex user_agent fields
我正在尝试重新生成此单行用户代理字段。
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
AppleWebKit/437.38 (KHTML, like Gecko) Chrome/49.0.3477.100
Safari/437.38"
1
| cat myfile | grep -oP '(user_agent=[^ ]*)' | awk {'print $1'} |
上面的命令返回
"user_agent="Mozilla/5.0"
只有。但是我需要一个完整的文本
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/437.38
(KHTML, like Gecko) Chrome/49.0.3477.100 Safari/437.38"
相配。
请帮助修改我使用的regex模式。
- 嗨,谢谢你的回复。我尝试了cat myfile grep-op"user_agent=(.*)$"awk"print$1",它仍然打印user_agent="mozilla/5.0。但我需要一整行来打印。我需要替换的任何东西。
- 同一排还有别的吗?如果是,请共享整行内容以供参考。目前,regex中的星号并不寻找完整的字符串,awk也只打印由[space]分隔的第一个元素。试试这个regex 'user_agent=[^ ].*)',去掉awk打印。
- 谢谢。删除awk后,我得到了整个行,但包括其他字段。请找出整行内容。我正在尝试仅获取用户代理字段。user_agent="mozilla/5.0(macintosh;intel mac os x 10_12_6)applewebkit/437.38(khtml,类似gecko)githubdesktop/1.4.1 chrome/49.0.3477.100 electron/2.0.9 safari/437.38"accept="application/vnd.github.v3+json,application/json"language=en-us status=201
- 现在试试这个regex 'user_agent=".*")(?=\saccept)'。
你面临的问题是2倍。
您的regex*只获取第一个字母,因为后面有一个空格,并且没有被捕获。
此外,即使修复了第一个部分,awk也将只打印由空格分隔的第一个内容。
所以你需要放开awk打印,用.*代替*,并有一个积极的展望。
检查以下内容:
1
| cat myfile | grep -oP '(user_agent=".*")(?=\saccept)' |
在这里,\".*\"正在搜索双引号内的所有内容。(?=\saccept)是一个积极的前瞻性声明,一旦找到a space followed by accept就会停止搜索。