【发布时间】:2017-08-28 14:20:06
【问题描述】:
您如何使用 grep 或使用 sed 或 awk 来解析动态长度的子字符串?下面是一些例子:
我需要解析这些字符串中除了“XXXXX.WAV”之外的所有内容,但这些字符串不是固定长度。
有时候是这样的:
{"filename": "/assets/JFM/imaging/19001.WAV"},
{"filename": "/assets/JFM/imaging/19307.WAV"},
{"filename": "/assets/JFM/imaging/19002.WAV"}
有时像这样:
{"filename": "/assets/JFM/LN_405999/101.WAV"},
{"filename": "/assets/JFM/LN_405999/102.WAV"},
{"filename": "/assets/JFM/LN_405999/103.WAV"}
是否有一种很好的动态方法来解析 .WAV?也许如果我从“/”开始并解析到“?”
编辑:
预期输出如下:
19001.WAV
19307.WAV
19002.WAV
或者:
101.WAV
101.WAV
103.WAV
【问题讨论】:
-
什么意思,显示预期的输出。可能只是做
grep -o '/.*WAV' -
我进行了编辑以显示预期的输出。我已经尝试了一些其他的东西,但为此我得到了输出文件路径的其余部分。这会给我预期的输出,但显然不适用于 .WAV 的不同数量的字符:
grep -o '[0-9][0-9][0-9][0-9][0-9][^"].WAV' -
这些程序的全部目的是解析动态字符串。所以是的,当然有可能。
-
使用 GNU
grep和-o选项,grep -o '[^/]*\.WAV'应该可以完成这项工作。查找一系列零个或多个非斜杠,后跟.WAV。或grep -E -o '[^/]+\.WAV'。等等。 -
这就是我要找的东西——我觉得自己无法得出这个结论是愚蠢的。感谢@JonathanLeffler 的帮助