Unix 如何阻止SED从文本文件中剥离最终换行

Unix 如何阻止SED从文本文件中剥离最终换行,unix,sed,Unix,Sed,我使用sed更新文本文件中的各种日期格式,并将结果附加到另一个文件中 文件日期存储为YYYYMMDD等,因此我将用实际日期替换YYYYMMDD 唯一的问题是每个文件的最后一行缺少一个新行字符,这意味着最后一行和第一行没有正确对齐 文件1: 00 YYMMDD TEST 05 3452256 MMDD 33456 80 File Trailer 文件2: 00 YYMMDD TEST 05 445674 MMDD 234456 80 File Trailer 我需要的是用当前日

我使用sed更新文本文件中的各种日期格式,并将结果附加到另一个文件中

文件日期存储为YYYYMMDD等,因此我将用实际日期替换YYYYMMDD

唯一的问题是每个文件的最后一行缺少一个新行字符,这意味着最后一行和第一行没有正确对齐

文件1:

00 YYMMDD TEST
05 3452256 MMDD 33456
80 File Trailer    
文件2:

00 YYMMDD TEST
05 445674 MMDD 234456
80 File Trailer    
我需要的是用当前日期更新YYMMDD和MMDD,并将这两个文件附加在一起,如下所示:

00 180129 TEST
05 3452256 0129 33456
80 File Trailer
00 180129 TEST
05 445674 0129 234456
80 File Trailer      
但我实际上得到的是:

00 180129 TEST
05 3452256 0129 33456
80 File Trailer00 180129 TEST
05 445674 0129 234456
80 File Trailer      
代码:

有人知道为什么会发生这种情况吗?这里是否有一个简单的解决方法


编辑


原来问题出在我使用的源文件上。特别是:文件预告片缺少一个CRLF。因此,上面的代码运行良好

我首先想建议用
替换
“$full\u path”
,我发现很难理解这个问题。。请尝试创建一个较小的示例输入/输出,但案例失败。。。并创建一个可以通过复制粘贴进行测试的样本
yyyymmdd
在代码中使用,但在示例输入中不存在。我用希望更好的示例更新了问题。OK,你能尝试一下吗?假设输入文件名为
f1
f2
。。。查看通过
a='XYZ'获得的输出;b='ABC';sed“s/YYMMDD/$a/g;s/MMDD/$b/g”f1 f2
YYYY=$(date +"%Y")
YY=$(date +"%y")
MM=$(date +"%m")
DD=$(date +"%d")
HH=$(date +"%H")
MI=$(date +"%M")
SS=$(date +"%S")
JJJ=$(date +"%j")

sed -- "s/yyyymmdd/$yyyyMMdd/g;s/yymmdd/$yyMMdd/g;s/mmdd/$mmdd/g;s/yyjjj/$yyjjj/g" "$full_path" >> $deploy_path
sed -- "\$s/$/\n/; s/yyyymmdd/$yyyyMMdd/g;s/yymmdd/$yyMMdd/g;s/mmdd/$mmdd/g;s/yyjjj/$yyjjj/g" "$full_path" >> $deploy_path