【发布时间】:2014-09-13 03:37:38
【问题描述】:
我使用以下 sed 命令来替换 CSV 行中的字符串
(替换字符串的条件是匹配CSV文件开头的数字)
SERIAL_NUM=1
sed "/$SERIAL_NUM/ s//OK/g" file.csv
问题是我只想匹配从行首开始的数字,
但 sed 匹配具有此编号的其他行
示例:
在此示例中,我想将单词 - STATUS 替换为 OK,但仅在以 1 开头的行中(在“,”分隔符之前)
所以我这样做
SERIAL_NUM=1
more file.csv
1,14556,43634,266,242,def,45,STATUS
2,4345,1,43,57,24,657,SD,STATUS
3,1,WQ,435,676,90,3,44f,STATUS
sed -i "/$SERIAL_NUM/ s/STATUS/OK/g" file.csv
more file.csv
1,14556,43634,266,242,def,45,OK
2,4345,1,43,57,24,657,SD,OK
3,1,WQ,435,676,90,3,44f,OK
但 sed 也将第 2 行和第 3 行中的 STATUS 替换为 OK(因为这些行的编号为 1)
请告知如何更改 sed 语法,以便仅匹配 "," 分隔符之前开始行的数字
remark - 解决方案也可以使用 perl line liner 或 awk,
【问题讨论】: