linux - 如何在 sed 上替换字符串

标签 linux sed

您好,我制作了一个脚本,它从我的数据库中获取数据并将其存储到 .csv 文件中

.csv 文件的内容:

1-Mar-12,183991,1017  --- --- more columns are there
2-Mar-12,,,,,,,,,,,,
3-Mar-12,,,,,,,,,,,,
4-Mar-12,,,,,,,,,,,,
5-Mar-12,,,,,,,,,,,,
6-Mar-12,,,,,,,,,,,,

当我尝试根据日期替换字符串时,它将添加所有相应的日期。

例如

我想在 2-Mar-12 替换一个字符串

命令是

sed "s/$finddate/$finalstring/" dailyrep.csv > DailyReport_$datenow.csv


sed "s/2-Mar-12/$mydata/" origfile > fileto store

输出是

2-Mar-12,177950,8159,95.62%,6785711
3-Mar-12,,,,,,,,,
4-Mar-12,,,,,,,,,
5-Mar-12,,,,,,,,,
6-Mar-12,,,,,,,,,

11-Mar-12,,,,,,,,,,,,,,,,,,,,
12-Mar-12,177950,8159,95.62%,


21-Mar-12,,,,,,,,,,,,,,,,,,,
22-Mar-12,177950,8159,95.62%

我只想替换那个特定的日期,而不是所有出现的日期。

最佳答案

您可以使用此 sed 命令:

$ sed "/^$finddate/s/$mydata/$finalstring/" dailyrep.csv

它只在包含$finddate 的行上将$mydata 替换为$finalstring

关于linux - 如何在 sed 上替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548362/

相关文章:

linux - 如何使用linux在特定列中翻转字符串

linux - 从unix中的倒数第二行删除一个字符

regex - 如何使用sed将引号内的所有字母大写?

linux - 在 sed 中编程 rev

c++ - 如何在 Linux 机器上链接一个静态库文件

linux - ARM Linux 引导的一些细节

c - liburing/IORING_OP_PROVIDE_BUFFERS - 分配给读取操作的错误缓冲区

regex - 如何在/bin/sh 脚本中使用正则表达式获取字符串的一部分

regex - 使用 sed 从挂载获取路径

linux - grep while read 行替代