微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 仅当行号以csv文件开头时才替换行

我使用以下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行的状态替换为OK(因为这些行的数字为1)

请建议如何更改sed语法,以便仅匹配在“,”分隔符之前开始行的数字

备注 – 解决方案也可以使用perl line liner或awk,

解决方法:

你可以使用anchor ^来确保$SERIAL_NUM仅在开始和使用时匹配,之后确保有一个逗号后跟这个数字:

sed "/^$SERIAL_NUM,/s/STATUS/OK/g" file.csv

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐