我有一条短信:
+--------------------------------------+
| ID |
+--------------------------------------+
| cb91a52f-f0dd-443a-adfe-84c5c685d9b3 |
| 184564aa-9a7d-48ef-b8f0-ff9d51987e71 |
| f01f9739-c7a7-404c-8789-4e3e2edf314e |
| 825925cc-a816-4434-8b4b-a75301ddaefd |
| 5b1b0ec1-9c7e-4852-bbb7-b1c883c2acce |
| fec4a447-9f51-4796-9c92-42268cd21ad1 |
| 77b37392-c5f8-4537-8e2b-971f6b161dec |
| e8524cf0-47d4-43f8-aee3-2af03f511ebe |
| 2a6640e2-bfdf-416c-8d86-e2127802779a |
| 0223ac3d-2f99-42ab-b6be-cc738e5e3e25 |
| d3577eb1-c8cb-4328-bf5f-48cb2ef43229 |
| f46ed4c1-9325-4d35-8dda-18d2af31a510 |
| 311bc474-5747-4408-9124-6fa3a24c08c1 |
| 81ebddc6-612f-4675-9004-80c35207e1e3 |
| 09518994-7b37-481c-b058-d74c16d4c198 |
| 1e318d02-afd4-4b97-85d8-8c8f8b007144 |
| c220fae1-5a56-485f-ad51-0e0316bc105c |
| afbef917-2ee8-4eb9-948d-48fcd5ffc6e4 |
| cc8a6692-2ba9-4203-bf50-b02a8e4a0f21 |
| f49089be-4b2a-4b10-bfbd-495001e64f54 |
| d89b0b19-0f26-4b9a-8a9a-25a41f59cee5 |
| 18f1717f-74ac-429a-ba2b-4466489a2558 |
| 7560d8b2-3e3d-474c-bcf8-ded378d50954 |
| 1b02c8f9-6077-4499-93f6-bc04d8b0ca3a |
| 9ca256b4-c9eb-4a60-8fb5-dfe4ea883e1f |
| 3c837469-aa82-41ac-b75e-9bb087501789 |
| e151d2c7-5360-466c-857f-7474eec4eaeb |
| c7ca1066-c077-4846-aae0-56d7fc63c32d |
| 034026df-9e45-49e1-ab41-0ad3f4e5e33b |
| 45bb533d-ff92-419e-8523-bb4c9889a04e |
+--------------------------------------+
**** Total: 30 ****
我想捕捉这样的线条:
| cb91a52f-f0dd-443a-adfe-84c5c685d9b3 |
这是“| UUID |”
所以我像这样使用正则:
check_vm_connectivity()
{
res=`cat temp.txt` # this got text above
re='^\| [a-z0-9\-]+ \|'
for line in "$res"
do
if [[ "${line}" =~ $re ]] ; then
echo "${line}"
fi
done
}
^\| [a-z0-9\-]+\|
是我使用的正则,但是结果捕获了所有行,我不知道哪里出了问题?那是因为我应该把 ' 变成 "?
最佳答案
以下命令是否是您要查找的内容:
grep -oP "^\|\s*\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\s*\|$" input.file | grep -v '_'
OUTPUT 在您的输入文件上:
| cb91a52f-f0dd-443a-adfe-84c5c685d9b3 |
| 184564aa-9a7d-48ef-b8f0-ff9d51987e71 |
| f01f9739-c7a7-404c-8789-4e3e2edf314e |
| 825925cc-a816-4434-8b4b-a75301ddaefd |
| 5b1b0ec1-9c7e-4852-bbb7-b1c883c2acce |
| fec4a447-9f51-4796-9c92-42268cd21ad1 |
| 77b37392-c5f8-4537-8e2b-971f6b161dec |
| e8524cf0-47d4-43f8-aee3-2af03f511ebe |
| 2a6640e2-bfdf-416c-8d86-e2127802779a |
| 0223ac3d-2f99-42ab-b6be-cc738e5e3e25 |
| d3577eb1-c8cb-4328-bf5f-48cb2ef43229 |
| f46ed4c1-9325-4d35-8dda-18d2af31a510 |
| 311bc474-5747-4408-9124-6fa3a24c08c1 |
| 81ebddc6-612f-4675-9004-80c35207e1e3 |
| 09518994-7b37-481c-b058-d74c16d4c198 |
| 1e318d02-afd4-4b97-85d8-8c8f8b007144 |
| c220fae1-5a56-485f-ad51-0e0316bc105c |
| afbef917-2ee8-4eb9-948d-48fcd5ffc6e4 |
| cc8a6692-2ba9-4203-bf50-b02a8e4a0f21 |
| f49089be-4b2a-4b10-bfbd-495001e64f54 |
| d89b0b19-0f26-4b9a-8a9a-25a41f59cee5 |
| 18f1717f-74ac-429a-ba2b-4466489a2558 |
| 7560d8b2-3e3d-474c-bcf8-ded378d50954 |
| 1b02c8f9-6077-4499-93f6-bc04d8b0ca3a |
| 9ca256b4-c9eb-4a60-8fb5-dfe4ea883e1f |
| 3c837469-aa82-41ac-b75e-9bb087501789 |
| e151d2c7-5360-466c-857f-7474eec4eaeb |
| c7ca1066-c077-4846-aae0-56d7fc63c32d |
| 034026df-9e45-49e1-ab41-0ad3f4e5e33b |
| 45bb533d-ff92-419e-8523-bb4c9889a04e |
解释:
^
行首\|
按字面意思匹配|
\s*
后接0到N个空格\w{8}-\w{4}-\w{4}-\w{4}-\w{12}
其中\w
是单词字符数,数字或下划线,\w{8}
8 表示正好出现 8 次,{12}
表示正好出现 12 次,... <\s*
后接0到N个空格\|
按字面匹配|
$
为行尾
然后以防万一我管道到 | grep -v '_'
删除带有 _
的行,如果您确信这些行不会包含这些行,则这可能不是必需的。
如果你想提取UUID
,你可以使用下面的grep命令:
grep -oP "(?<=^\|\s)\w{8}-\w{4}-\w{4}-\w{4}-\w{12}(?=\s\|$)" input.file | grep -v '_'
cb91a52f-f0dd-443a-adfe-84c5c685d9b3
184564aa-9a7d-48ef-b8f0-ff9d51987e71
f01f9739-c7a7-404c-8789-4e3e2edf314e
825925cc-a816-4434-8b4b-a75301ddaefd
5b1b0ec1-9c7e-4852-bbb7-b1c883c2acce
fec4a447-9f51-4796-9c92-42268cd21ad1
77b37392-c5f8-4537-8e2b-971f6b161dec
e8524cf0-47d4-43f8-aee3-2af03f511ebe
2a6640e2-bfdf-416c-8d86-e2127802779a
0223ac3d-2f99-42ab-b6be-cc738e5e3e25
d3577eb1-c8cb-4328-bf5f-48cb2ef43229
f46ed4c1-9325-4d35-8dda-18d2af31a510
311bc474-5747-4408-9124-6fa3a24c08c1
81ebddc6-612f-4675-9004-80c35207e1e3
09518994-7b37-481c-b058-d74c16d4c198
1e318d02-afd4-4b97-85d8-8c8f8b007144
c220fae1-5a56-485f-ad51-0e0316bc105c
afbef917-2ee8-4eb9-948d-48fcd5ffc6e4
cc8a6692-2ba9-4203-bf50-b02a8e4a0f21
f49089be-4b2a-4b10-bfbd-495001e64f54
d89b0b19-0f26-4b9a-8a9a-25a41f59cee5
18f1717f-74ac-429a-ba2b-4466489a2558
7560d8b2-3e3d-474c-bcf8-ded378d50954
1b02c8f9-6077-4499-93f6-bc04d8b0ca3a
9ca256b4-c9eb-4a60-8fb5-dfe4ea883e1f
3c837469-aa82-41ac-b75e-9bb087501789
e151d2c7-5360-466c-857f-7474eec4eaeb
c7ca1066-c077-4846-aae0-56d7fc63c32d
034026df-9e45-49e1-ab41-0ad3f4e5e33b
45bb533d-ff92-419e-8523-bb4c9889a04e
关于regex - 如何在 shell 中使用正则捕获这个特定的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187744/