shell - sed 替换引号中的字符串;带有反向引用;外壳脚本
问题描述
我在这方面工作太久了,所以我怀疑我错过了一些基本的东西。
很抱歉,这可能是有据可查的,但我已阅读,但我仍然没有得到它。
我正在尝试替换一行上的日期。原行内容如下:
date = "2020-11-01"
我试图用今天的日期替换那个日期,所以我有:
text_date="$(date +%Y\-%m\-%d)"
sed -i 's/(date = ")*(")/\1'"$text_date"'\2/g' "$post_dir"/index.md
我尝试转义空格和引号(以及等号),但我感到很沮丧。
我目前收到一个错误:
sed: -e expression #1, char 33: invalid reference \1 on `s' command's RHS
知道会发生什么吗?太感谢了!
解决方案
在 bash 中,引号的作用更像是通过 shell 控制字符扩展的开关,而不是字符串的开头和结尾(有关详细说明,请参阅这个很棒的站点)。因此,您可以“关闭单引号(防止扩展),放置新数据,然后“重新打开单引号”:
sed 's/\(date = \).*/\1"'$(date +%Y\-%m\-%d)'"/' your_file
一旦您确认这是在做您想做的事,您可以添加-i
以就地进行替换:
sed -i 's/\(date = \).*/\1"'$(date +%Y\-%m\-%d)'"/' your_file
推荐阅读
- data-science - 只有零的列是否在数据分析中提供任何信息?如果它有缺失值怎么办?
- http-post - Mikrotik 从服务器或网页收到 HTTP POST
- javascript - 处理节点应用程序中的 request.js 错误
- python - web3.py 从 get 函数以奇怪的格式返回
- c++ - 为什么 c_str() 不读取附加的字符串?
- python - Pytorch 和数据增强:如何通过模糊、旋转等来增强数据
- javascript - svg中文本的字体样式在下载时不会传播到png
- php - 在php中获取只有名字和姓氏的第一个字母
- node.js - 如何使用 NodeJS 从另一个 Docker 容器访问 sqlite3 数据库?
- sql - 如何修复在 ssrs 中单击两次查看报告的问题