嘗試使用 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
我還使用通配符(例如 *、^ 和 . ,但它沒有用。
uj5u.com熱心網友回復:
您可以使用
sed -E -i 's/(Eric|Chad);[0-9]*/\1;2/g' fileGrades.txt
詳情:
-E- POSIX ERE 已啟用-i- 輸入檔案的內容被修改s/(Eric|Chad);[0-9]*/\1;2- 匹配并捕獲到第 1 組 (\1)Eric或Chad,然后匹配;零個或多個數字,并將此匹配替換為第 1 組值,;和2。
請參閱在線演示:
#!/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]*/\1;2/g' <<< "$s"
輸出:
Student;Grade;Comment;
Eric;2;None;
Smith;2;None;
Thomas;1;None;
Chad;2;Nice work;
uj5u.com熱心網友回復:
這是一個為 量身定制的問題awk,awk在您顯示的示例案例中使用以下代碼。
awk 'BEGIN{FS=OFS=";"} FNR==1{print;next} $1=="Eric" || $1=="Chad"{$2=2} 1' Input_file
一旦您對上述代碼的結果感到滿意,請嘗試以下代碼將輸出保存到 Input_file 本身。
awk 'BEGIN{FS=OFS=";"} FNR==1{print;next} $1=="Eric" || $1=="Chad"{$2=2} 1' Input_file > temp && mv temp Input_file
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317390.html
