[英]Grep/Sed/Awk Options
您如何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
:
grep -o '[^/]\{1,\}\.WAV' yourfile
如果wav文件始终包含数字,则这似乎更明确(结果相同):
grep -o '[0-9]\{1,\}\.WAV'
假设文件的开头和结尾都有[
和]
行,则看起来您的输入是JSON,在这种情况下,我建议您安装并使用jq
而不是基于文本的实用程序,并执行以下操作:
jq -r '.[]|.filename|split("/")[-1]'
否则,列出的任何工具都可以正常工作。
grep -o '[^/]*\.WAV'
要么
sed -ne 's,.*/\([^/]*\.WAV\).*$,\1,p'
要么
awk -F'"' '/WAV/ {split($4,a,"/"); print a[length(a)]}'
在每种情况下,还有多种其他可能的解决方案。
尝试这个 -
awk -F'[{":}/]' '{print $(NF-2)}' f
19001.WAV
19307.WAV
19002.WAV
要么
egrep -o '[[:digit:]]{5}.WAV' f
19001.WAV
19307.WAV
19002.WAV
要么
egrep -o '[[:digit:]]{5}.[[:alpha:]]{3}' f
19001.WAV
19307.WAV
19002.WAV
您可以根据需要在egrep中使用不同的示例轻松更改数字和字符的值,但是awk在两种情况下都可以正常工作。
或与sed
$ sed 's,.*/,,; s,".*,,' x
101.WAV
102.WAV
103.WAV
说明:
s,.*/,,
--删除所有内容,包括最右边的/
s,".*,,
-删除从最左边的"
到行尾的所有内容 您列出的所有程序都使用regex解析名称,因此我将向您展示一个使用grep
的示例,它可能是这种情况下最基本的示例。
有两个选项,具体取决于您在“ .wav”之前定义XXX部分的确切方式。
如您所指出的,选项1只是文件名,即最后一个斜杠之后的所有内容:
grep -hoi "[^/]\+\.WAV"
读作为“除斜杠之外的任何字符”( [^/]
)至少重复一次( \\+
),然后是文字.WAV
( \\.WAV
)。
选项2是仅获取扩展名之前的数字:
grep -hoi "[[:digit:]]\+\.WAV"
要么
grep -hoi "[0-9]\+\.WAV"
这些读作“数字”( [[:digit:]]
和[0-9]
表示同一件事)至少重复一次( \\+
),然后是文字.WAV
( \\.WAV
)。
在所有情况下,我建议使用标志-h
, -o
, -i
,它们已串联到单个选项-hoi
。 -h
从输出中禁止文件名。 -o
使grep
仅输出匹配的部分。 -i
使区分大小写不敏感,因此扩展名应该改为.wav
而不是.WAV
,这样就可以了。
同样,在所有情况下,输入取决于您。 您可以通过另一个程序将其插入
program | grep -hoi "[^/]\+\.WAV"
您可以使用stdin重定向从文件中获取它:
grep -hoi "[^/]\+\.WAV" < somefile.txt
或者,您可以将文件名传递给grep
:
grep -hoi "[^/]\+\.WAV" somefile.txt
另一个awk
awk -F'[/"]' '{print $(NF-1)}' file
19001.WAV
19307.WAV
19002.WAV
awk -F/ '{print substr($5,1,7)}' file
101.WAV
102.WAV
103.WAV
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.