[英]Capture groups of text via a Bash script
A file that looks like the following is created from an API call. 通过API调用创建了如下所示的文件。
{
"success" : true,
"messages" : [ "traces loaded successfully" ],
"traces" : [ "CRXJ-ZCKP-3XVD-4J36", "8C31-QMHZ-XVF0-ZV4Q", "40P7-MT6L-2YFP-5Q6Q", "JE7J-J4WQ-7GGL-2U8N", "10PW-AZ8M-FPTK-XWYL", "9YGF-5HOP-8GTY-9AF4", "SNXZ-GW6O-BTJT-3XUX" ]
}
How can I capture each traces separately? 如何分别捕获每条迹线? I will need to iterate through them in a subsequent step.
在接下来的步骤中,我将需要遍历它们。
The following doesn't return anything unless I remove the parentheses. 除非删除括号,否则以下内容不会返回任何内容。 Then it just gives the entire "traces" line.
然后,它仅给出整个“迹线”行。
grep "([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4})"
The answer must be able to run on all Unix machines without loading libraries. 答案必须能够在所有Unix机器上运行而无需加载库。
You can use: 您可以使用:
grep -oE '([A-Z0-9]+-?){4}' file
Options: 选项:
-o, --only-matching show only the part of a line matching PATTERN
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
Output: 输出:
CRXJ-ZCKP-3XVD-4J36
8C31-QMHZ-XVF0-ZV4Q
40P7-MT6L-2YFP-5Q6Q
JE7J-J4WQ-7GGL-2U8N
10PW-AZ8M-FPTK-XWYL
9YGF-5HOP-8GTY-9AF4
SNXZ-GW6O-BTJT-3XUX
Use grep -oE
: 使用
grep -oE
:
grep -oE '[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}' file
Output: 输出:
CRXJ-ZCKP-3XVD-4J36
8C31-QMHZ-XVF0-ZV4Q
40P7-MT6L-2YFP-5Q6Q
JE7J-J4WQ-7GGL-2U8N
10PW-AZ8M-FPTK-XWYL
9YGF-5HOP-8GTY-9AF4
SNXZ-GW6O-BTJT-3XUX
You could also stay in bash: 您还可以继续使用bash:
#!/usr/bin/env bash
regex='("(([[:alnum:]]{4}-?){4})"(, )?)+'
while read -r line
do
if [[ "$line" =~ $regex ]]
then
for trace in ${BASH_REMATCH[0]//[\",]/}
do
echo "do stuff with $trace"
done
fi
done<input_file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.