假设我有一个包含以下内容的文件
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:F:G:
如何使用F
第二行更改R
为多个文件sed
?
期望的输出是:
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:
编辑:
更改应该只在每个文件的第二行,字段由 : 分隔,所以我需要更改第 9 个字段,并忽略该字段是否有除 F 以外的任何内容。
答案1
和awk
:
替换2nd
每个文件以及9th field
F 到 R上的每一行
$ awk 'BEGIN{FS=OFS=":"} FNR==2{ sub(/^F$/,"R",$9); }1' file1 file2
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:
答案2
使用 awk:
$ awk -F: -vOFS=: '($9=="F" && NR==2){$9="R"}1' file
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:
对于许多文件,执行以下操作:
for file in *; do
awk -F: -vOFS=: '($9=="F" && NR==2){$9="R"}1' "$file" > newfile &&
mv newfile "$file"
done
或者,使用较新版本的 GNU awk:
gawk -iinplace -F: -vOFS=: '($9=="F" && FNR==2){$9="R"}1' file.*