如何使用 sed、grep 或 awk 只获取令牌?
How get only token using sed, grep or awk?
令牌位于行的中间。
我尝试了一些可能性,但不匹配,例如:
sed -n '/matched/,$p' file
sed -n '/token=/,$p' file > out.txt
grep -oP '(?<=token: ).*' file
grep -Po 'token\s\K.*' file
我有这个:
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
需要这个:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
你可以使用
grep -Po 'token=\K\S+' file
Sed 解决方案:
sed -nE 's/.*token=([^[:space:]]+).*//p' file
见regex demo。 详情:
token=
- 固定子串
\K
- 匹配重置运算符,丢弃当前匹配内存缓冲区中到目前为止匹配的文本
\S+
- 一个或多个 non-whitespace 个字符。
参见 online demo:
#!/bin/bash
s='207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"'
grep -Po 'token=\K\S+' <<< "$s"
输出:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
sed命令的意思是
-n
- 抑制默认行输出
E
- 启用 POSIX ERE 语法
.*token=([^[:space:]]+).*
- 找到任何文本,然后 token=
,然后将任何一个或多个 non-whitespace 个字符捕获到第 1 组中,然后匹配行中的其余文本
</code> - 用第 1 组值替换匹配项</li>
<li><code>p
- p
打印替换结果。
注意:
每当你需要提取的值后面没有 space + 协议名称,并且 token
之后可以有其他查询参数时,你需要取反 &
以及白space。然后只需使用 grep -Po 'token=\K[^&\s]+' file
和 sed -nE 's/.*token=([^&[:space:]]+).*//p' file
.
看起来你想要
sed -n 's/.*token=\([^ &]*\).*//p' file
或
grep -Po 'token=\K[^ &]*' file
使用sed
$ sed -n '/GET/{s/.*=//;s/ .*//p}' input_file
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
建议:
grep -oP '(?<=&token)[^ ]*' input.1.txt
我注意到你问题中的 jwt
标签,JWT
使用 base64 编码,它以 header 开头,必须有 2 个键:alg
和 typ
,顺序并不重要,因此前缀可能是 {"alg"
或 {"typ"
,在 base64 编码后给出 eyJhbGci
或 eyJ0eXAi
。考虑到上述考虑,我将按照以下方式使用 GNU AWK
,令 file.txt
内容为
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
然后
awk 'BEGIN{FPAT="(eyJhbGci|eyJ0eXAi)[-_=A-Za-z0-9]+"}NF{print }' file.txt
输出
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
说明:我使用 FPAT
(字段模式)通知 GNU AWK
该字段以 eyJhbGci
或 eyJ0eXAi
开头,然后是 1 个或多个使用 URL 和文件名安全字母表 的 Base 64 编码中的字符
如 RFC3548 中所述(ASCII 字母、ASCII 数字、减号、下划线、等号)
(在 gawk 4.2.1 中测试)
一个稍微更冗长但也更便携的版本 - 它基本上是好的 ole' =
使用FS
自身定位令牌所在位置后,
使用 1 次调用 sub()
来清理
不属于 JSON 令牌
的任何内容
强制比较“less than empty string
”,
始终为假 (0),任何引发的
zero-th awk
的幂变成数字一 (1),
从而允许里面的所有东西
`$( )`
变成$(1)
,再用一次=
到auto-trim两端的空格
[m/n/g]awk '
BEGIN { _=(___=index(FS="^.+[&]"\
"token=","."))~(__="")
} +_<NF && \
\
($_=$(($!_=$___)^(sub("([& ].*)?$",__)<__)))' <<< "${s}"
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
.
.
.
经测试并确认可在 gawk 5.1.1、mawk 1.3.4、mawk 1.9.9.6 和 macOS nawk 上运行
— 4Chan 出纳员
awk可以使用match函数,打印时将token=
的6个字符计算在内。
模式中的 [^[:space:]]+
部分匹配 1 次或多次出现的除空白字符外的任何字符
awk 'match([=10=], /token=[^[:space:]]+/) {
print substr([=10=], RSTART+6, RLENGTH-6)
}' file
输出
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
令牌位于行的中间。 我尝试了一些可能性,但不匹配,例如:
sed -n '/matched/,$p' file
sed -n '/token=/,$p' file > out.txt
grep -oP '(?<=token: ).*' file
grep -Po 'token\s\K.*' file
我有这个:
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
需要这个:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
你可以使用
grep -Po 'token=\K\S+' file
Sed 解决方案:
sed -nE 's/.*token=([^[:space:]]+).*//p' file
见regex demo。 详情:
token=
- 固定子串\K
- 匹配重置运算符,丢弃当前匹配内存缓冲区中到目前为止匹配的文本\S+
- 一个或多个 non-whitespace 个字符。
参见 online demo:
#!/bin/bash
s='207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"'
grep -Po 'token=\K\S+' <<< "$s"
输出:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
sed命令的意思是
-n
- 抑制默认行输出E
- 启用 POSIX ERE 语法.*token=([^[:space:]]+).*
- 找到任何文本,然后token=
,然后将任何一个或多个 non-whitespace 个字符捕获到第 1 组中,然后匹配行中的其余文本</code> - 用第 1 组值替换匹配项</li> <li><code>p
-p
打印替换结果。
注意:
每当你需要提取的值后面没有 space + 协议名称,并且 token
之后可以有其他查询参数时,你需要取反 &
以及白space。然后只需使用 grep -Po 'token=\K[^&\s]+' file
和 sed -nE 's/.*token=([^&[:space:]]+).*//p' file
.
看起来你想要
sed -n 's/.*token=\([^ &]*\).*//p' file
或
grep -Po 'token=\K[^ &]*' file
使用sed
$ sed -n '/GET/{s/.*=//;s/ .*//p}' input_file
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
建议:
grep -oP '(?<=&token)[^ ]*' input.1.txt
我注意到你问题中的 jwt
标签,JWT
使用 base64 编码,它以 header 开头,必须有 2 个键:alg
和 typ
,顺序并不重要,因此前缀可能是 {"alg"
或 {"typ"
,在 base64 编码后给出 eyJhbGci
或 eyJ0eXAi
。考虑到上述考虑,我将按照以下方式使用 GNU AWK
,令 file.txt
内容为
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/procedimento?filter%5B%5D=status,eq,SIM&filter%5B%5D=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 71194 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/salas?filter=clinicaId,eq,50&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 303 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "PUT /api_producao.php/sala_horario/14 HTTP/1.1" 200 1 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:32 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/aux_clinica_profissional?filter=clinicaId,eq,42&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 2730 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/profissional?filter=id,in,5,0,9,7,51,10,25,24,33,34,48,0,45,27,105,130,115,118,119,124,0,127&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4 HTTP/1.1" 200 10827 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
207.244.229.206 - - [28/Mar/2022:14:35:33 -0300] "GET /api_producao.php/sala_horario?filter=salaID,eq,15&transform=1&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE HTTP/1.1" 200 141 "-" "GuzzleHttp/6.5.5 curl/7.81.0 PHP/7.4.28"
然后
awk 'BEGIN{FPAT="(eyJhbGci|eyJ0eXAi)[-_=A-Za-z0-9]+"}NF{print }' file.txt
输出
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
说明:我使用 FPAT
(字段模式)通知 GNU AWK
该字段以 eyJhbGci
或 eyJ0eXAi
开头,然后是 1 个或多个使用 URL 和文件名安全字母表 的 Base 64 编码中的字符
如 RFC3548 中所述(ASCII 字母、ASCII 数字、减号、下划线、等号)
(在 gawk 4.2.1 中测试)
一个稍微更冗长但也更便携的版本 - 它基本上是好的 ole' =
使用
FS
自身定位令牌所在位置后,使用 1 次调用
的任何内容sub()
来清理 不属于 JSON 令牌强制比较“
less than empty string
”, 始终为假 (0),任何引发的 zero-thawk
的幂变成数字一 (1),
从而允许里面的所有东西
`$( )`
变成$(1)
,再用一次=
到auto-trim两端的空格
[m/n/g]awk '
BEGIN { _=(___=index(FS="^.+[&]"\
"token=","."))~(__="")
} +_<NF && \
\
($_=$(($!_=$___)^(sub("([& ].*)?$",__)<__)))' <<< "${s}"
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
. . .
经测试并确认可在 gawk 5.1.1、mawk 1.3.4、mawk 1.9.9.6 和 macOS nawk 上运行
— 4Chan 出纳员
awk可以使用match函数,打印时将token=
的6个字符计算在内。
模式中的 [^[:space:]]+
部分匹配 1 次或多次出现的除空白字符外的任何字符
awk 'match([=10=], /token=[^[:space:]]+/) {
print substr([=10=], RSTART+6, RLENGTH-6)
}' file
输出
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMiwiaXNzIjoiaHR0cHM6Ly93d3cuc2RycG9ydG8uY29tLmJyL2JhY2svb2RvbnRvbG9naWEvcHVibGljL2FwaS92MS9zaWduaW4iLCJpYXQiOjE2NDg0ODc1OTksImV4cCI6MTY0ODQ5MTE5OSwibmJmIjoxNjQ4NDg3NTk5LCJqdGkiOiJUZEtqTnlnWWxiZkJmVEpWIn0.ZNIZJtJQS8BbITnkgGL8j-8g7q47nZ7TTdIA2-6s2k4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjExMSwiaXNzIjoiaHR0cHM6Ly9zZHJwb3J0by5jb20uYnIvYmFjay9vZG9udG9sb2dpYS9wdWJsaWMvYXBpL3YxL3NpZ25pbiIsImlhdCI6MTY0ODQ4Njk4MCwiZXhwIjoxNjQ4NDkwNTgwLCJuYmYiOjE2NDg0ODY5ODAsImp0aSI6IndsZVNhZ1ppb3VWVUFRb2cifQ.gnAzxxtWNdUY_Ech0Lj5v8TNMvSTOnjLWLHYhY3eMvE