linux 命令为文件中除第一行和以哈希符号开头的行之外的所有行添加值前缀

问题描述 投票:0回答:1

给出一个文件input.csv,如下所示,

EMP_ID,EMP_NAME,JOINING_DATE,SALARY
1,T Natarajan,22-APR-2024,6000000
2,Velmurugan,22-JUL-2024,2000000
3,Rowin,21-OCT-2024,5000000
#END_OF_FILE

如何在除第一行和以井号 (#) 开头的行之外的所有行中添加前缀“E_”。预期输出是,

EMP_ID,EMP_NAME,JOINING_DATE,SALARY
E_1,T Natarajan,22-APR-2024,6000000
E_2,Velmurugan,22-JUL-2024,2000000
E_3,Rowin,21-OCT-2024,5000000
#END_OF_FILE

尝试过这个命令

sed -i -E '/^(#)/! s/^/E_/' input.csv
,但它也在更新第一行。

linux bash shell sed
1个回答
0
投票

您没有执行任何操作来排除第一行。

您可以用大括号组合两个条件:

sed '/^#/!{;1!s/^/E_/;}' input.csv

或者您可以扭转逻辑以跳过这些行;

sed '/^#/b;1b;s/^/E_/' input.csv

b
命令表示“跳转到脚本中的这一点”;如果没有标签,它会跳转到末尾,跳过当前输入行的脚本的其余部分。)

我拿出了

-i
选项;一旦您对结果符合您的期望感到满意,就把它放回去。

此外,括号没有任何作用,所以我也删除了它们。这样,脚本就不再使用任何 ERE 语法,因此我也删除了

-E
选项。

© www.soinside.com 2019 - 2024. All rights reserved.