全部,
我的文件名始终采用以下格式“rX_Q_Y_filename.mp3”,其中 X 和 Y 是数字 (0-9)。仅供参考,文件名中的 X 和 Y 可以是 1 位或多位数字
例如“r1234_Q_456789_filename.mp3”
如何使用 bash 脚本提取文件名中的“Q_456789”部分?
答案1
对于 bash:
# See "modern regexps" in regex(7) for regexp syntax.
# The intermediate $re variable is not necessary, but it removes the
# need for having to escape every single metacharacter in the regexp.
re='_(Q_[[:digit:]]+)'
if [[ $name =~ $re ]]; then
part=${BASH_REMATCH[1]}
echo "Matched on $part"
else
echo "Match failed"
fi
答案2
我不确定这是否正是你想要的,但是:
ls -1 r*.mp3 | egrep -o Q_[0-9]+
将返回 Q_{numbers} 列表
$ ls r*.mp3
r1234_Q_456789_test.mp3
$ ls -1 r*.mp3 | egrep -o Q_[0-9]+
Q_456789
答案3
这是一种低效的使用方法awk
。
$ ls -1 *.mp3
r1234_Q_433_filename.mp3
r1234_Q_456789_filename.mp3
r323_Q_433_filename.mp3
$ ls -1 *.mp3 | awk '{print substr($1, match($0, /Q/), (match($0, /\_f/) - match($0, /Q/)))}'
Q_433
Q_456789
Q_433
答案4
Sed 一行代码:
sed 's/[^Q]*\(Q_[0-9]*\)_.*/\1/' <<<"r1234_Q_456789_filename.mp3"
Q_456789
“Q” 是您感兴趣的第一个字符,因此丢弃它之前的所有内容,将“Q_number”分组,然后丢弃其余部分,替换反向引用。