2014-09-24 74 views
1

我有問題,使用sed插入線,我需要完成兩件事情有一個CSV文件sed的 - 當文本中找到/未找到

  1. 在每行前面不啓動UNES我需要添加標籤「BF2」;
  2. 在文件的開頭(在UNES之後,如果存在)我需要添加一個標籤「UNH;」

實施例(無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; 
+0

什麼是'NCTS-(TA)'這是目前在中間? – 2014-09-24 11:43:26

+0

這只是毛茸茸的 - 我會編輯它看起來像原始輸入 - 像往常一樣,我很抱歉在一個巨大的衝擊! – wellyno1 2014-09-24 11:44:33

+0

如果聯合國教科文組織不在最高層? – 2014-09-24 11:45:38

回答

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; 
+0

您好,感謝,當UNES出現在文件中時工作。我需要能夠處理不包含UNES的文件,然後處理UNH;在開始時加入BF2;到其他每一行的開頭 – wellyno1 2014-09-24 11:51:48

+0

所以總是加上「UNH」但低於「UNES」;如果那已經在那裏? – 2014-09-24 11:53:03

+0

是的 - 這將是偉大的(不得不填寫12個字符。) – wellyno1 2014-09-24 11:54:45

1

您可以使用此sed命令:

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

細節:

/^UNES;$/i\ UNH;插入新行時UNES;是整條線。

n替換下一行

0

試試這個,它的作品對我來說,模式空間

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