Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Sed更换日期_Linux_Bash_Sed - Fatal编程技术网

Linux Sed更换日期

Linux Sed更换日期,linux,bash,sed,Linux,Bash,Sed,所以,我已经研究了其他问题,似乎没有什么具体的问题可以帮助我。我有一个文件,它有一个日期变量集,如mm/dd/yyyy,我想用它来替换日期 例如: version.js //Application Version Information app_date="7/07/2015"; ... 我想用sed来代替它。实际上,我有一个shell脚本,它替换了这个文件中的许多内容,并且除了日期之外,所有工作都正常。目前我正在尝试的是: sed -i -e 's:app_date="[0-9][0-9]/

所以,我已经研究了其他问题,似乎没有什么具体的问题可以帮助我。我有一个文件,它有一个日期变量集,如mm/dd/yyyy,我想用它来替换日期

例如:

version.js

//Application Version Information
app_date="7/07/2015";
...
我想用sed来代替它。实际上,我有一个shell脚本,它替换了这个文件中的许多内容,并且除了日期之外,所有工作都正常。目前我正在尝试的是:

sed -i -e 's:app_date="[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]":app_date="$(date %m/%d/%Y)":g'
但这并没有让我得到我想要的结果。我也试过:

sed -ibak 's/app_date=\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"/app_date=\$(date +%m/%d/$Y)\"/g'
两者似乎都不起作用

有什么想法吗

编辑以添加:

我成功采用的解决方案是Sean Bright的双引号:

sed -i -e "s:app_date=".*";:app_date="$(date +%m/%d/%Y)";:g" version.js

这完全符合我的需要

如果您匹配的日期是10月10日,我打赌您的脚本会起作用

sed -i -e 's:app_date="[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9][0-9][0-9]":app_date="$(date %m/%d/%Y)":g'
如上所述,在日和月表达式后添加*s。[0-9][0-9]与7不匹配

现在我想了想,因为您不关心文件中已经存在的日期,所以大部分都是不必要的,您可以简单地执行以下操作:

sed -i -e 's:app_date=".*";:app_date="'$(date +%m/%d/%Y)'";:g' version.js

我敢打赌,如果你匹配的日期是10月10日,你的剧本一定会成功

sed -i -e 's:app_date="[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9][0-9][0-9]":app_date="$(date %m/%d/%Y)":g'
如上所述,在日和月表达式后添加*s。[0-9][0-9]与7不匹配

现在我想了想,因为您不关心文件中已经存在的日期,所以大部分都是不必要的,您可以简单地执行以下操作:

sed -i -e 's:app_date=".*";:app_date="'$(date +%m/%d/%Y)'";:g' version.js

您使用了错误的shell引号。命令substitution$将不会在单引号内展开

sed -i "/^app_date=/capp_date=\"$(date +%m/%d/%Y)\";" version.js # GNU only
另一种方法是使用文件编辑器而不是流编辑器:

ed -s version.js << EOF
/^app_date=/c
app_date="$(date +%m/%d/%Y)";
.
w
EOF

您使用了错误的shell引号。命令substitution$将不会在单引号内展开

sed -i "/^app_date=/capp_date=\"$(date +%m/%d/%Y)\";" version.js # GNU only
另一种方法是使用文件编辑器而不是流编辑器:

ed -s version.js << EOF
/^app_date=/c
app_date="$(date +%m/%d/%Y)";
.
w
EOF

用于在Linux中用任何内容替换日期

n=`date +%d`

cal>temp

If [$n -lt 10]   

//10 is just a predction for condition


then

Sed s/"$n"/*/g temp   

else

Sed s/"$n"/**/g temp

fi
//s是文本替换选项 //*有什么可以代替日期的吗
//g是全局替换

用于在Linux中将日期替换为任何内容

n=`date +%d`

cal>temp

If [$n -lt 10]   

//10 is just a predction for condition


then

Sed s/"$n"/*/g temp   

else

Sed s/"$n"/**/g temp

fi
//s是文本替换选项 //*有什么可以代替日期的吗
//g是全局替换

对于sed,您是否有理由保持双倍范围而不是使用[0-9]\+?对对于sed-r?不,这是雷格士方言。肖恩,这太棒了。但是,它现在将日期替换为$date%m/%d/%Y,而不是将其转换为今天的日期。我是否需要转义引号,然后调用日期?谢谢,我还发现在sed中使用双引号启动搜索替换字符串才能工作。您有理由保留双引号范围,而不是在sed中使用[0-9]\+?对对于sed-r?不,这是雷格士方言。肖恩,这太棒了。但是,它现在将日期替换为$date%m/%d/%Y,而不是将其转换为今天的日期。我是否需要转义引号,然后调用日期?谢谢,我还发现在sed中使用双引号启动搜索替换字符串可以工作。您的预期输出是什么?您的示例日值7/与您的正则表达式[0-9][0-9]/不匹配,文件日期也使用YYYY-MM-DD格式,并且它们将在ls列表中自动排序。祝你好运。正则表达式的一般规则是不要过度匹配。因此,请参阅Sean Bright答案的第二部分,了解如何避免匹配您不关心的内容。我希望预期输出为今天的日期。因此,如果我在脚本中嵌入sed命令并运行脚本,我希望它将日期更改为今天。您成功使用的解决方案是使用错误的引号,我实际上不知道为什么它在运行时没有给出语法错误。您希望所有的sed脚本都包含在单引号中,以防止shell扩展,但现在大部分脚本都包含在双引号中,并实际转义为。*的无引号文本。将其更改回sed-i-e的:app_date=.*;:app_date='$date+%m/%d/%Y';:建议使用类似@SeanBright的g'version.js。您的预期输出是什么?示例日值7/与[0-9][0-9]/的正则表达式不匹配。文件日期也使用YYYY-MM-DD格式,它们将在ls列表中自动排序。祝你好运。正则表达式的一般规则是不要过度匹配。因此,请参阅Sean Bright答案的第二部分,了解如何避免匹配您不关心的内容。我希望预期输出为今天的日期。因此,如果我在脚本中嵌入sed命令并运行脚本,我希望它将日期更改为今天。您成功使用的解决方案是使用错误的引号,我实际上不知道为什么它在运行时没有给出语法错误。您希望所有的sed脚本都包含在单引号中,以防止shell扩展,但现在大部分脚本都包含在双引号中,并实际转义为。*的无引号文本。将其更改回sed-i-e的:app_date=.*;:app_date='$date+%m/%d/%Y';:像@SeanBright这样的g'version.js建议。