Вы можете просто безоговорочно запустить sed
для файла, если хотите:
sed -i .bak -Ee 's/^PASS_WARN_AGE\s+0/PASS_WARN_AGE 7/' /etc/login.defs
Я бы с осторожностью использовал шаблон вроде \ s \ s \ s \ s
, поскольку количество пробелов может отличаться. Я не думаю, что \ s
является стандартным, но я полагаю, что если контекст - RHEL, у вас все равно будет GNU sed.
Думаю, вам нужно что-то вроде:
$ cat mkv-analysis.csv | xargs -I % ffmpeg ...
% - аргумент, в вашем случае путь к файлу.
при условии, что mkv-analysis.csv
имеет формат:
file-path1
file-path2
...
Если формат отличается, вам придется подготовить его с помощью awk
:
Например :
$ awk '...awk script...' mkv-analysis.csv | xargs ffmpeg ...
Главное, чтобы xargs
кормил ffmpeg
файлами, и на этом этапе ffmpeg
должен быть в состоянии найти файл.
Вы используете одинарные кавычки вокруг $ file
, что означает, что переменная не раскрывается:
$ var="foo"
$ echo "$var"
foo
$ echo '$var'
$var
Итак, команда, которую вы ищете (с некоторыми дополнительными улучшениями):
while read -r file; do
ffmpeg -i "$file" -c:v libx265 -x265-params crf=23 -preset medium -c:a copy -c:s copy "${file%.mkv}_new.mkv"
done < mkv-analysis.csv
Обратите внимание, что нет необходимости в cat
и совершенно бессмысленно запускать команду в качестве подстановки команды ( $ (command)
). Это необходимо только тогда, когда вы хотите зафиксировать вывод команды в переменной.