使用 sed 替换分号后的符号

Using sed to replace symbol after semicolon

尝试使用 sed 命令更改分号后的单词,例如 (fileGrades.txt):

Student;Grade;Comment;
Eric;1;None;
Smith;2;None;
Thomas;1;None;
Chad;3;Nice work;

现在使用 sed 命令应该找到 Eric 和 Chad 并将他们的成绩都更改为 2,但其余部分保持不变。我正在考虑用这种方法来做(见下文),但它没有用,因为它不允许我利用分号来知道在哪里更改成绩。

sed -i 's/Chad;*/Chad;2/g' fileGrades.txt

我也尝试过使用*、^ 和 等通配符的这种方法。 , 但它没有用。

您可以使用

sed -E -i 's/(Eric|Chad);[0-9]*/;2/g' fileGrades.txt

详情:

  • -E - POSIX 启用 ERE
  • -i - 输入文件的内容被修改
  • s/(Eric|Chad);[0-9]*/;2 - 匹配并捕获到第 1 组 (</code>) <code>EricChad,然后匹配 ; 和零个或多个数字,以及用第 1 组值 ;2.
  • 替换此匹配项

参见online demo

#!/bin/bash
s='Student;Grade;Comment;
Eric;1;None;
Smith;2;None;
Thomas;1;None;
Chad;3;Nice work;'
sed -E 's/(Eric|Chad);[0-9]*/;2/g' <<< "$s"

输出:

Student;Grade;Comment;
Eric;2;None;
Smith;2;None;
Thomas;1;None;
Chad;2;Nice work;

这是为 awk 量身定制的问题,请在您显示的示例案例中使用以下 awk 代码。

awk 'BEGIN{FS=OFS=";"} FNR==1{print;next} =="Eric" || =="Chad"{=2} 1' Input_file

一旦您对上述代码的结果感到满意,请尝试使用以下代码将输出保存到 Input_file 本身。

awk 'BEGIN{FS=OFS=";"} FNR==1{print;next} =="Eric" || =="Chad"{=2} 1' Input_file > temp && mv temp Input_file