使用awk搜索模式到特殊字符

时间:2018-03-22 17:25:37

标签: awk grep pattern-matching

我有一个类似下面的文件

HTTP/1.1 401 Unauthorized
Server: WinREST HTTP Server/1.0
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 89
WWW-Authenticate: ServiceAuth realm="WinREST", nonce="1828HvF7EfPnRtzSs/h10Q=="

<html><head><title>Unauthorized</title></head><body>Error 401: 
Unauthorized</body></html>

我需要获取nonce,这只是1828HvF7EfPnRtzSs / h10Q ==在前面og nonce =

我正在使用

grep -oP 'nonce="\K[^"]+' response.xml 

但P参数不再有效。 我怎么能用awk甚至Grep用另一个参数做同样的事情呢?

提前致谢

2 个答案:

答案 0 :(得分:1)

解决方案第一: 关注awk可能对您有帮助。

awk -F"\"" '/nonce/{print $(NF-1)}' Input_file

解决方案第二: 一个sed解决方案也是如此。

sed -n '/nonce=/s/\(.*nonce\)="\([^"]*\)\(.*\)/\2/p'  Input_file

上述两个代码中的输出均为1828HvF7EfPnRtzSs/h10Q==

答案 1 :(得分:1)

sed

$ sed -nE 's/.*nonce="([^"]+)"/\1/p' file

1828HvF7EfPnRtzSs/h10Q==

使用grep管道

$ grep -oE 'nonce=\S+' file | cut -d= -f2- | tr -d '"'

1828HvF7EfPnRtzSs/h10Q==