如何使用sed命令修改分号分隔文件中指定学生的成绩值
问题原因
你写的命令里;*是正则语法,代表匹配前一个字符(分号)出现0次或多次,无法匹配分号后面的成绩字段内容,所以替换后无法覆盖原有成绩,达不到预期效果。
正确实现命令
Linux系统下执行以下命令即可:
sed -i -E '/^(Eric|Chad);/s/([^;]+);[^;]+;/\1;2;/' fileGrades.txt
命令说明
-E参数开启扩展正则支持,减少不必要的转义符/^(Eric|Chad);/是行过滤规则,只会处理以Eric;或者Chad;开头的记录,其他行保持不变- 替换规则
s/([^;]+);[^;]+;/\1;2;/中:([^;]+)捕获第一个分号前的姓名内容,存入捕获组1[^;]+匹配第二个字段(原成绩)的全部内容\1;2;用捕获到的姓名加新成绩2,替换原有姓名+成绩的部分,保证后续字段不变
如果是MacOS系统,sed的-i参数需要额外指定空备份后缀,命令调整为:
sed -i '' -E '/^(Eric|Chad);/s/([^;]+);[^;]+;/\1;2;/' fileGrades.txt
执行后效果
修改后的文件内容如下,仅Eric和Chad的成绩被修改为2:
Student;Grade;Comment; Eric;2;None; Smith;2;None; Thomas;1;None; Chad;2;Nice work;
内容的提问来源于stack exchange,提问作者Exchange_programming
相关产品推荐
相关产品推荐

