使用 sed 更改文件中除特定行号(标题)之外的所有内容?

使用 sed 更改文件中除特定行号(标题)之外的所有内容?

我想在 Linux 上使用 sed 更改 CSV 文件中所有行的所有第二个字段除了第一行(即标题)。我知道我可以循环它并使用 sed -i '{$LINE_NUMBER ....' 逐行进行操作,而不是在那一行上使用它,但我想知道是否有一种方法可以做到这一点而不需要一个较慢的循环。

我想我也可以更改所有内容。然后在下一行中将其更改回这一特定行。

| Q1 | Q2 | Q3 |
| Name    | Resource_ID | Key |
| Joseph | 343433| AGFD |
| Mary | 242355 | AREW |

答案1

如果没有查看您的数据,我们无法给您明确的答案,但根据您的描述,您正在寻找2,${}。例如:

$ seq 5 | sed '2,${s/$/foo/}'
1
2foo
3foo
4foo
5foo

这意味着从第二行运行代码{}直到文件末尾。但很可能您最好使用awk或任何其他可以本地处理“字段”的工具。

答案2

对于您想要做的事情来说,几乎可以肯定 awk 是比 sed 更好的选择。我猜当您说要修改第二个字段时,它实际上是|您指的第三个分隔字段,在这种情况下:

$ awk 'BEGIN{FS=OFS="|"} NR>1{$3=" whatever "} 1' file
| Q1 | Q2 | Q3 |
| Name    | whatever | Key |
| Joseph | whatever | AGFD |
| Mary | whatever | AREW |

相关内容