Что ж, вы все еще не сказали, какой результат вы хотите получить от какого ввода,
так что я пойду чтобы угадать.
Думаю, вы хотите сделать что-то одно (например, вывести «Найдено»)
, если пользователь вводит Title = "Three Little Pigs"
и Author = " Мэри Джейн "
,
или, если пользователь вводит Title =" Cinderella "
и Author =" Paul Johnson "
(или любой другой строка в файле) и что-то еще
(например, вывод «Not Found»), если пользователь вводит что-нибудь еще
(например, Title = "Three
и Автор = "Мэри"
,
или Title = "Три поросенка"
и Автор = "Пол Джонсон"
).
Я предлагаю вам использовать ответ phk и выполнить
if grep "^\s*$Title\s*:\s*$Author\s*$" BookDB.txt > /dev/null
then
echo "Found"
else
echo "Not Found"
fi
, либо вы можете изменить первую строку на
if grep -x "\s*$Title\s*:\s*$Author\s*" BookDB.txt > /dev/null
. Примечания:
^
представляет начало строки . $
обозначает конец строки. ^ образец $
представляет собой образец
, занимающий всю строку. grep -x " шаблон "
также представляют устанавливает шаблон
, занимающий всю строку.
Если вы внимательно прочитаете Соответствие точной строке с помощью grep ,
вы увидите, что перепутали -w
и -x
. \ s
означает пробел.
\ s *
означает ноль или более пробелов.> / dev / null
, чтобы соответствующие строки не отображались на выходе
(т. Е. На экране).
Как указывает giusti ,
вы также можете использовать -q
(или - quiet
или - -silent
) для этого. Как указано в phk , вы можете получить неожиданные / нежелательные результаты
, если название или имя автора включают двоеточие,
или если пользователь вводит любой символ (s)
, которые являются специальными в регулярных выражениях
(например, ^
, $
, \
, *
, [
, ]
, .
,
или иногда (
, )
, {
, }
, ?
и +
).
Вам нужно использовать цикл в оболочке для циклического перебора всех файлов MP3, поскольку ffmpeg обычно требует только один выходной файл за один запуск. В bash это будет выглядеть так:
for f in *.mp3; do
ffmpeg -i "$f" "${f%.mp3}.aac"
done
Обратите внимание, что из соображений качества звука вы, вероятно, захотите дать ffmpeg некоторые параметры. В ffmpeg AAC Encoding Guide есть подробности, но в качестве быстрого примера средняя строка может выглядеть так:
ffmpeg -i "$f" -c:a libfdk_aac -vbr 3 "${f%.mp3}.aac"
(PS: несколько удивительно, что ваш телефон не поддерживает MP3, поддержка очень распространена, и она указана на спецификацию вашего телефона).
don_chrissti предлагает альтернативу, использующую GNU Parallel (которая должна быть быстрее на многоядерных процессорах, так как она будет запускать несколько кодировок одновременно):
parallel ffmpeg -i {} -c:a libfdk_aac -vbr 3 {.}.aac ::: *.mp3
Обратите внимание, что существует также версия параллельной программы moreutils, которая имеет совершенно другой синтаксис (и не будет работать в приведенном выше).
Я могу сделать для одного файла ffmpeg -i test.mp3 test.aac, но для многих файлов следующее не работает, если команда пытается перезаписать некоторые файлы .mp3 для некоторых причина. ffmpeg -i * .mp3 * .aac
Звездочка просто расширяется до всех файлов MP3 в вашем каталоге, поэтому первый в списке просто попытается перезаписать второй. Вам нужно написать цикл. Предполагая, что ваша оболочка - bash:
for mp3file in *.mp3; do
ffmpeg -i $mp3file `basename $mp3file .mp3`.aac
done