我使用sed更新文本文件中的各种日期格式,并将结果附加到另一个文件。
文件日期存储为YYYMMDD等,因此我将YYYMMDD替换为实际日期。
唯一的问题是每个文件的最后一行都缺少一个新行字符,这意味着最后一行和第一行未正确对齐。
文件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
代码:
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
有谁知道为什么会这样,如果这是一个简单的解决方法?
修改
事实证明问题出在我使用的源文件上。具体来说:文件预告片缺少CRLF。所以上面的代码工作正常。
答案 0 :(得分:1)
我首先建议将"$full_path"
替换为<(cat "$full_path"; echo)
,但要意识到您的“$ full_path”将包含2个文件而我的修复仅适用于一个文件。
您可以使用sed
在$s/$/\n/
附加换行符,因此请将命令更改为
sed -- "\$s/$/\n/; s/yyyymmdd/$yyyyMMdd/g;s/yymmdd/$yyMMdd/g;s/mmdd/$mmdd/g;s/yyjjj/$yyjjj/g" "$full_path" >> $deploy_path