我想删除 Echo 中的新行,然后用它们作为文件后缀。
files=$(cat ./Temp/files.txt)
prefixedfiles=$(cat ./Temp/prefixedfiles.txt)
echo "$files" >> generatedscript
sed -e 's/^/ffmpeg -i /' generatedscript >> generatedscript2
sed 's/$/ -vcodec libx264 -acodec copy -threads 10 -crf 18 /' >>
generatedscript2
echo "$prefixedfiles" > generatedscript3
例如 files.txt
./Testing/blank.mp4
./More Testing/Test.mkv
例如 prefixedfiles.txt
../Encoded/Testing/blank.mp4
../Encoded/More Testing/Test.mkv
预期输出:generatedscript3
ffmpeg -i ./Testing/blank.mp4 -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/blank.mp4
ffmpeg -i ./More Testing/Test.mkv -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/Test.mkv
答案1
根据我的评论,我认为您提供的脚本的逻辑存在缺陷 - 具体来说,我不明白 sed 如何能够按行合并 2 个输入文件(我认为它不像您想象的那样工作)
我为你想到了一个替代解决方案 -
#! /bin/bash
export IFS=$'\n'
(
for LINE in `paste Temp/files.txt Temp/prefixedfiles.txt`
do
F1=`echo $LINE | cut -f1`
F2=`echo $LINE | cut -f2`
echo "ffmpeg -i $F1 -vcodec libx264 -acodec copy -threads 10 -crf 18 $F2"
done
) > generatedscript3
解释:
导出 IFS 行将文件分隔符更改为换行符 - 这意味着文件中的空格将得到正确处理。
神奇的事情发生在 LINE 循环中——“粘贴”命令将两个文件合并为一个制表符分隔的输出,然后逐行处理。
F1 和 F2 将输入的两部分分成变量,然后使用 echo 行打印出来。
整个输出被捕获到一个名为 generatedscript3 的文件中(因为循环和回显位于括号之间)