如何使用sed将test.txt中的字符串date替换为实际系统日期
问题根因
- 写在
test.sed文件中的$(date)属于shell命令替换语法,sed本身没有解析这类shell语法的能力,只会将其作为普通字符串处理,因此无法输出系统日期。 - 自定义日期格式中使用的
/与sed默认的替换分隔符/冲突,会触发语法错误。
解决方案
方案1:直接在shell命令行执行(无需单独编写sed脚本,最简便)
sed的替换规则直接写在命令行中,用双引号包裹让shell先解析命令替换,再传给sed执行:
- 替换为默认格式的系统日期:
sed "s/date/$(date)/" test.txt - 替换为
月/日/年格式的日期:
把sed的替换分隔符换成|避免和日期中的/冲突,执行:sed "s|date|$(date +'%m / %d / %y')|" test.txt
如果你需要直接修改原
test.txt文件,GNU sed(Linux系统默认)加-i参数即可:sed -i "s|date|$(date +'%m / %d / %y')|" test.txt;macOS系统自带的sed需要加空后缀:sed -i '' "s|date|$(date +'%m / %d / %y')|" test.txt
方案2:必须使用独立.sed脚本文件的处理方式
如果要求替换规则保存在test.sed文件中,需要先让shell解析完日期变量后生成可用的sed脚本再执行:
执行以下命令即可:
# 先动态生成包含实际日期的sed脚本 cat > test.sed <<EOF s|date|$(date +'%m / %d / %y')| EOF # 执行sed脚本 sed -f test.sed test.txt
内容的提问来源于stack exchange,提问作者Leli
相关产品推荐
相关产品推荐

