Как искать текст, хранящийся в переменной?

См. http://mywiki.wooledge.org/BashFAQ/001 и http://mywiki.wooledge.org/DontReadLinesWithFor о том, как читать строки, которые потенциально содержат пробелы и другие специальные символы.

Есть тонна неправильного в том, как вы работаете с текстом в вашем сценарии. Во многих случаях он подвержен разрыву слов, который вам не нужен. За более подробной информацией обратитесь к Wooledge FAQ.

Аудиофайлы часто имеют имена с пробелами, так что это будет проблемой для вас.

Одним из способов сделать это будет использование возможности Bash'а extglob, чтобы избежать необходимости разбирать и находить вывод . (find -exec ... {} + будет другим способом).

shopt -s extglob
for wav in **/*.wav; do
    mp4="${wav%.wav}.mp4"  # strip off the .wav suffix, tack on .mp4
    if ! [[ -e "$mp4" ]]; then
        ffmpeg -i "$wav" -c:a libfdk_aac -b:a 96k "$mp4"
    fi
done

Обратите внимание, что другие AAC-кодеры ffmpeg все еще не так хороши, как libfdk.

1
18.04.2018, 23:08
1 ответ

Вы можете использовать herestring <<<для передачи строки в grep:

newnum=$(grep -oE '[0-9]+' <<< "$key" | sort -rn | head -n 1)

Это будет более эффективно, чем echo "$key" | grep, создающее дополнительный процесс.

Не забудьте заключить ваши переменные в двойные кавычки, чтобы предотвратить разбиение слов и подстановку. См. также это .

4
27.01.2020, 23:18

Теги

Похожие вопросы