如何使用 sed 替换多个文件中特定行和字段中的字符串

如何使用 sed 替换多个文件中特定行和字段中的字符串

假设我有一个包含以下内容的文件

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 fieldF 到 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.*

相关内容