免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3502 | 回复: 6
打印 上一主题 下一主题

[文本处理] sed 一次性插入两行数据(数据带有变量)的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-02-23 11:05 |只看该作者 |倒序浏览
实现目的:
检查文件中是否已经 插入了某个字符串,有则不处理,没有则需要 进行下面处理

1. 在指定行(在“匹配字符串”的前3行) 插入两行数据

#时间
DATE=`date "+%Y-%m-%d %H:%M:%S"`

#需要插入第一行字符串
string_mask_1="# Toy module => $DATE add"

#需要插入第二行字符串
string_mask_2="include \$(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk"
  
#匹配字符串
target_string="# SDK object files"

#获取匹配字符串的 前3行行号
line_num=`expr $(sed -n "/$target_string/=" $2/Makefile) - 3`

#grep -q  判断 字符串是否已经插入, 插入就不处理 ,没有插入就需要处理
grep -q "$string_mask_2" $2/Makefile && echo "All toy module !!!" || \
sed -i ' '$line_num'i '$string_mask_1' => '$DATE_N' include\n'$string_mask' ' module/Makefile

但是 sed 一直保存,说找不到 include

sed: can't read 19:09:09 include\ninclude: No such file or directory
sed: can't read $(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk: No such file or directory



论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2019-02-23 14:50 |只看该作者
要处理的文件名真如你写的这样吗?

论坛徽章:
0
3 [报告]
发表于 2019-02-23 15:16 |只看该作者
回复 3# cjaizss

你是怀疑 路径下的文件不存在是吗?

grep -q "$INSERT_STRING_2" $2/Makefile && echo "All  add to the build flow!!!" || \
sed -i ''$line_num'i\# Tonly module => 2019-02-23 add\n\include\$(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk' $2/Makefile
}



路径应该没错,因为我按照上面的 直接使用字符串,确实可以的

但是这样就不灵活,插入的内容 固化了,而且时间也要手动改。


问题应该是sed  使用变量的问题我把字符串切为两个 变量的模式就不可以

字符串1
# Tonly module => 2019-02-23 add        ===>  string_mask_1="# Toy module => $DATE add"




\n ===> 换行


字符串2
include \$(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk ====> string_mask_2="include \$(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk"



论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2019-02-23 17:41 |只看该作者
\$(SOURCE_DIR)前面的反斜线去掉

论坛徽章:
0
5 [报告]
发表于 2019-02-23 21:34 |只看该作者
回复 5# cjaizss

这个是 字符串  用转义就是为了保留它的原型 并不是变量

论坛徽章:
0
6 [报告]
发表于 2019-02-23 21:35 |只看该作者
回复 5# cjaizss

这个是 字符串  用转义就是为了保留它的原型 并不是变量

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2019-02-25 12:08 |只看该作者
mksu 发表于 2019-02-23 21:35
回复 5# cjaizss 这个是 字符串  用转义就是为了保留它的原型 并不是变量

19:09:09 include\ninclude
$(SOURCE_DIR)/middleware/third_party/toy/customer_config/toy_module.mk
你的文件名叫这么奇怪的名字?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP