提取一行字符串中两个符号之间的字符串
extract string between two symbols in a one-line string
我有一个包含多个 url 的单行,我想将其提取并打印为新行。如示例所示,我想提取 {"url
和 "}
之间的部分并作为新行打印。试过这样的事情:
sed -n 's/.*\{"url\(.*\)"}.*//p'
在
"crams":{"tumor":{"url:rvrvwedre"}}fawirnfaiwrunfiawun"crams":{"tumor":{"url:rvrvwdwEDerare"}}nowiaunrvwiorunwaeiou"crams":{"tumor":{"url:rvrverSQWSare"}}ieurnveiarunviearuv"crams":{"tumor":{"url:rvrveraSQWSQre"}}
输出
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
使用sed
$ sed 's/.[^{]*.[^{]*[^:]*\(url[^"]*\)[^}]*../\n/g' input_file
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
如果你破坏了 JSON 并且因此使用正确的 JSON 解析器不是选项我会使用 GNU AWK
以下方式,让 file.txt
内容为
"crams":{"tumor":{"url:rvrvwedre"}}fawirnfaiwrunfiawun"crams":{"tumor":{"url:rvrvwdwEDerare"}}nowiaunrvwiorunwaeiou"crams":{"tumor":{"url:rvrverSQWSare"}}ieurnveiarunviearuv"crams":{"tumor":{"url:rvrveraSQWSQre"}}
然后
awk 'BEGIN{FPAT="url:[^\x22]*"}{for(i=1;i<=NF;i+=1){print $i}}' file.txt
输出
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
解释:我使用FPAT
(Field PATtern)通知AWK该字段是url:
后跟0个或多个not-"
(我用\x22
来得到 "
没有结尾的字符串,22(十六进制)在 ASCII 中是 "
),然后 for
每个字段我 print
它。
(在 GNU Awk 5.0.1 中测试)
如果您被允许使用 GNU grep
那么您可能会选择使用
grep -o 'url:[^"]*' file.txt
说明:-o
表示只打印匹配的内容。
(在 grep (GNU grep) 3.4 中测试)
我有一个包含多个 url 的单行,我想将其提取并打印为新行。如示例所示,我想提取 {"url
和 "}
之间的部分并作为新行打印。试过这样的事情:
sed -n 's/.*\{"url\(.*\)"}.*//p'
在
"crams":{"tumor":{"url:rvrvwedre"}}fawirnfaiwrunfiawun"crams":{"tumor":{"url:rvrvwdwEDerare"}}nowiaunrvwiorunwaeiou"crams":{"tumor":{"url:rvrverSQWSare"}}ieurnveiarunviearuv"crams":{"tumor":{"url:rvrveraSQWSQre"}}
输出
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
使用sed
$ sed 's/.[^{]*.[^{]*[^:]*\(url[^"]*\)[^}]*../\n/g' input_file
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
如果你破坏了 JSON 并且因此使用正确的 JSON 解析器不是选项我会使用 GNU AWK
以下方式,让 file.txt
内容为
"crams":{"tumor":{"url:rvrvwedre"}}fawirnfaiwrunfiawun"crams":{"tumor":{"url:rvrvwdwEDerare"}}nowiaunrvwiorunwaeiou"crams":{"tumor":{"url:rvrverSQWSare"}}ieurnveiarunviearuv"crams":{"tumor":{"url:rvrveraSQWSQre"}}
然后
awk 'BEGIN{FPAT="url:[^\x22]*"}{for(i=1;i<=NF;i+=1){print $i}}' file.txt
输出
url:rvrvwedre
url:rvrvwdwEDerare
url:rvrverSQWSare
url:rvrveraSQWSQre
解释:我使用FPAT
(Field PATtern)通知AWK该字段是url:
后跟0个或多个not-"
(我用\x22
来得到 "
没有结尾的字符串,22(十六进制)在 ASCII 中是 "
),然后 for
每个字段我 print
它。
(在 GNU Awk 5.0.1 中测试)
如果您被允许使用 GNU grep
那么您可能会选择使用
grep -o 'url:[^"]*' file.txt
说明:-o
表示只打印匹配的内容。
(在 grep (GNU grep) 3.4 中测试)