使用 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>Eric
或 Chad
,然后匹配 ;
和零个或多个数字,以及用第 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
尝试使用 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>Eric
或Chad
,然后匹配;
和零个或多个数字,以及用第 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