sed - 找到/找不到文本时插入行

时间:2014-09-24 11:37:08

标签: sed

我遇到sed问题,我需要用csv文件完成两件事

  1. 在不启动UNES的每一行前面我需要添加标签" BF2;"
  2. 在文件的开头(在UNES之后,如果有的话)我需要添加一个标签" UNH;"
  3. 示例(没有UNES;)

    50000024;IE15;041111;113901;verstuurd;Aangift;
    50000024;IE15;041111;113901;verstuurd;Aangifte;
    50000024;IE15;041111;113901;verstuurd;Aangifte;
    

    示例(使用UNES;)

    UNES;
    50000024;IE15;041111;113901;verstuurd;Aangift;
    50000024;IE15;041111;113901;verstuurd;Aangifte;
    50000024;IE15;041111;113901;verstuurd;Aangifte;
    
    到目前为止,我有这个:

    sed -e 's/^\([^"UNES"]\)/BF2;\1/' | sed '/UNES/ a\UNH;'
    

    这与UNES一样长;标签存在 - 我似乎无法弄清楚如何插入UNH;当UNES不在场时!

    任何帮助非常感谢

    示例输出:

    UNES;
    UNH;
    BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
    BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
    BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
    

3 个答案:

答案 0 :(得分:2)

以下是使用awk的方法:

awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file

在第一行,如果匹配/ ^ UNES; / print,则设置标志f。始终打印“UNH;”。如果已设置f标志,请不要执行下一个操作,该操作适用于其余行。始终在第一行后将f重置为0,以便所有其他行都具有“BF2;”添加到开始。

测试出来:

$ cat file
UNES;
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
$ awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file
UNES;
UNH;
BF2;50000024;IE15;041111;113901;verstuurd;Aangift;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
$ cat file2
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
$ awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file2
UNH;
BF2;50000024;IE15;041111;113901;verstuurd;Aangift;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;

答案 1 :(得分:1)

您可以使用此sed命令:

sed '/^UNES;$/{i\
UNH;
n};s/^/BF2;/;' file.txt

细节:

/^UNES;$/i\ UNH;在UNES时插入一个新行;是整条线。

n用下一行替换模式空间

答案 2 :(得分:0)

试试这个,它适用于我

sed '/^UNES;$/{i\
UNH;
n};s/^[0-9]*/BF2;&/;'