通过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" ]
}
如何分别捕获每条迹线? 我将需要在后续步骤中迭代它们。
除非我删除括号,否则以下内容不会返回任何内容。然后它只给出了整个"痕迹"线。
grep "([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4})"
答案必须能够在所有Unix机器上运行而无需加载库。
答案 0 :(得分:2)
您可以使用:
grep -oE '([A-Z0-9]+-?){4}' file
选项:
-o, --only-matching show only the part of a line matching PATTERN
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
输出:
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
答案 1 :(得分:1)
使用grep -oE
:
grep -oE '[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}' file
输出:
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
答案 2 :(得分:0)
你也可以留在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