sed和it';s regex用于可选符号
我正在编写一个脚本,用于根据提示列表将大FLAC音频文件拆分为小块。我使用cueprint来确定标记信息,但在某些情况下,它不能提供我需要的信息,我需要使用sed直接从cue文件中挖掘信息。现在我在和类型的东西作斗争。它的问题在于它以不同的方式出现:sed和it';s regex用于可选符号,regex,sed,Regex,Sed,我正在编写一个脚本,用于根据提示列表将大FLAC音频文件拆分为小块。我使用cueprint来确定标记信息,但在某些情况下,它不能提供我需要的信息,我需要使用sed直接从cue文件中挖掘信息。现在我在和类型的东西作斗争。它的问题在于它以不同的方式出现: REM GENRE "Gothic" REM GENRE Gothic 两者似乎都是标准的,但很难解析。 第二种情况类似于 sed -nr -e "s/^(REM GENRE )(.*)\r/\2/p" *.cue 完美地工作并按预期返回。但对
REM GENRE "Gothic"
REM GENRE Gothic
两者似乎都是标准的,但很难解析。
第二种情况类似于
sed -nr -e "s/^(REM GENRE )(.*)\r/\2/p" *.cue
完美地工作并按预期返回。但对于第一个案例,“哥特式”是返回的,这不是我不想做的。
在正则表达式的第一部分和第三部分中,您会说“使用”可选的引号,如下所示
sed -nr -e "s/^(REM GENRE \"?)(.*)\"?\r/\2/p" *.cue
但这并不像预期的那样有效,结果是
Gothic"
带有尾随的双引号
<如何>用SED?< P> > > < <代码>(*)>代码>将中间的代码> >([^)] * /代码>以排除引号。 < P>更改<代码>(*)> <代码>中间>代码>([^)] /代码>以排除引号。 可以使用这个,
sed -nr -e 's/^(REM GENRE )"?([^"\r]*)/\2/p' *.cue
你可以用这个
sed -nr -e 's/^(REM GENRE )"?([^"\r]*)/\2/p' *.cue
sed
非常匹配。当您匹配(.*)?
时,*
匹配哥特式“
,”?
匹配空字符串。您必须从*
字符串中排除双引号,例如
sed -nr 's/^REM GENRE "?([^"]*)"?\r?/\1/p' *.cue
请注意,这将导致带引号的字符串出现问题,如“哥特\“ic”
。为避免此问题,需要使用更大的枪。我建议
sed -nr '/^REM GENRE "?(([^"]|\\")*)"?\r?/ { s//\1/; s/\\"/"/g; p; }'
就是
/^REM GENRE "?(([^"]|\\")*)"?\r?/ { # if a line contains the pattern
s//\1/ # isolate the capturing group
s/\\"/"/g # unescape quotes
p # then print.
}
请注意正则表达式中匹配非引号字符和转义引号的
([^“]\\”*
。sed
非常匹配。当匹配(.*)?
时,*
匹配哥特式“
,”?
匹配空字符串。您必须从*
字符串中排除双引号,例如
sed -nr 's/^REM GENRE "?([^"]*)"?\r?/\1/p' *.cue
请注意,这将导致带引号的字符串出现问题,如“哥特\“ic”
。为避免此问题,需要使用更大的枪。我建议
sed -nr '/^REM GENRE "?(([^"]|\\")*)"?\r?/ { s//\1/; s/\\"/"/g; p; }'
就是
/^REM GENRE "?(([^"]|\\")*)"?\r?/ { # if a line contains the pattern
s//\1/ # isolate the capturing group
s/\\"/"/g # unescape quotes
p # then print.
}
请注意正则表达式中匹配非引号字符和转义引号的
([^“]\\”*
。非常好。但不适用于带引号的单词:REM流派“哥特式”“单词”
这是真的。cueprint格式允许这种事情吗?嗯,我不认为类似“哥特式”“摇滚乐”的东西是“可期待的”“在这种情况下,我甚至不认为像哥特\”ic这样的东西是我在那里看到过的东西。所以,两个建议的答案都会非常有效。非常好。但对引用的单词不起作用:REM体裁“哥特式”“单词”
是真的。cueprint格式允许这样的事情吗?嗯,我不认为像“哥特式”“摇滚”这样的东西是”“在这种情况下,我甚至不认为像哥特”这样的ic是我在那里看到的东西。因此,这两个建议的答案都将非常有效。