为了满足遗留代码,我必须将日期添加到如下所示的文件名(它绝对需要并且不能修改遗留代码:()。但是我需要在同一命令中删除日期而不需要换行。从文本文件中读取此命令,因此我应该在单个命令中执行此操作。
$((echo "$file_name".`date +%Y%m%d`| sed 's/^prefix_//')
所以这里我从文件名中删除前缀并添加一个附加到filename的日期。我也想删除我添加的日期。例如:prefix_filename.txt或prefix_filename.zip应该给我如下。
预期产出:
filename.txt
filename.zip
当前输出:
filename.txt.20161002
filename.zip.20161002
答案 0 :(得分:0)
假设所有文件都格式化为filename.ext.date,您可以将输出传递给'cut'命令并仅获取第1和第2个字段:
~> X=filename.txt.20161002
~> echo $X | cut -d"." -f1,2
filename.txt
答案 1 :(得分:0)
我不确定我是否正确理解了您的问题,但也许这样做符合您的要求:
$((echo "$file_name".`date +%Y%m%d`| sed -e 's/^prefix_//' -e 's/\.[^.]*$//')
答案 2 :(得分:0)
示例输入:
cat sample
prefix_original.txt.log.tgz.10032016
prefix_original.txt.log.10032016
prefix_original.txt.10032016
prefix_one.txt.10032016
prefix.txt.10032016
prefix.10032016
grep
从字符串的开头到字面点"."
后跟数字。
grep -oP '^.*(?=\.\d)' sample
prefix_original.txt.log.tgz
prefix_original.txt.log
prefix_original.txt
prefix_one.txt
prefix.txt
prefix
或许应该使用以下内容:
grep -oP '^.*(?=\.\d)|^.*$' sample
答案 3 :(得分:0)
如果我正确理解你的问题,你想从变量中删除日期部分,并且你已经从上下文中知道变量DOES包含一个日期部分,并且该部分位于名称中的最后一个句点之后。 / p>
在这种情况下,问题归结为删除最后一个时期以及后来的时间。
这可以通过
完成(Posix shell,bash,zsh,ksh) filename_without=${filename_with%.*}
假设 filename_with 包含最后有日期部分的文件名。
答案 4 :(得分:0)
% cat example
filename.txt.20161002
filename.zip.20161002
% cat example | sed "s/.[0-9]*$//g"
filename.txt
filename.zip
%