用sed代替化学原子序数

时间:2016-06-14 07:43:21

标签: sed

我试图在一个文件中替换一些原子序数模式。该文件在列中包含一系列原子序数,如第一列所示。现在我想用一系列数字替换第一列数字,如第二列后一行。

C1  C21
C2  C22
C4  C23
C5  C24
C6  C25
C7  C26
C8  C27
C9  C28
C10 C29
C11 C30
C12 C31
C13 C32
C14 C33

O1  O11
O2  O12
O3  O13
O4  O14
O5  O15
O6  O16

H1  H31
H2  H32
H3  H33
H4  H34
H5  H35
H6  H36
H7  H37
H8  H38
H9  H39
H10 H40
H11 H41
H12 H42
H13 H43
H14 H44
H15 H45
H16 H46
H17 H47
H18 H48
H19 H49
H20 H50
H21 H51
H22 H52
H23 H53
H24 H54
H25 H55
H26 H56
H27 H57
H28 H58

为了达到这个目的,我尝试了下面的sed命令

 sed -i -e 's/C1/C21/;s/C2/C22/;s/C3/C23/;s/C4/C24/;s/C5/C25/;s/C6/C26/;s/C7/C27/;s/C8/C28/;s/C9/C29/;s/C10/C30/;s/C11/C31/;s/C12/C32/;s/C13/C33/;s/C14/C34/;s/O1/O11/;s/O2/O12/;s/O3/O13/;s/O4/O14/;s/O5/O15/;s/O6/O16/;s/H1/H31/;s/H2/H32/;s/H3/H33/;s/H4/H34/;s/H5/H35/;s/H6/H36/;s/H7/H37/;s/H8/H38/;s/H9/H39/;s/H10/H40/;s/H11/H41/;s/H12/H42/;s/H13/H43/;s/H14/H44/;s/H15/H45/;s/H16/H46/;s/H17/H47/;s/H18/H48/;s/H19/H49/;s/H20/H50/;s/H21/H51/;s/H22/H52/;s/H23/H53/;s/H24/H54/;s/H25/H55/;s/H26/H56/;s/H27/H57/;s/H28/H58/' FILE_NAME

不幸的是,我得到的是多个替换,如C3328等等。

任何人都可以帮我解决这个问题的正确方法吗?提前欣赏。

3 个答案:

答案 0 :(得分:0)

目前还不清楚,但我认为这就是你想要的:

$ cat tst.awk
BEGIN { cnt["C"]=21; cnt["O"]=11; cnt["H"]=31 }
NF { c=substr($0,1,1); $0=c cnt[c]++ }
{ print }

$ awk -f tst.awk file
C21
C22
C23
C24
C25
C26
C27
C28
C29
C30
C31
C32
C33

O11
O12
O13
O14
O15
O16

H31
H32
H33
H34
H35
H36
H37
H38
H39
H40
H41
H42
H43
H44
H45
H46
H47
H48
H49
H50
H51
H52
H53
H54
H55
H56
H57
H58

答案 1 :(得分:-1)

问题是input { file { path => "/var/log/test.log" codec => json start_position => "beginning" } } filter { date { timezone => "UTC" match => [ "timestamp" , "yyyy-mm-dd'T'HH:mm:ss.SSSZ"] } } output { stdout { codec => rubydebug } } 将尝试按顺序执行所有替换,这会导致多次替换。因此,您需要重新安排从最具体到最不具体的替换。例如:

sed

答案 2 :(得分:-2)

在每个模式工作正常之后放置[^ 0-9],以自动化此过程:

awk '$0{printf("s/%s\\([^0-9]\\)/%s\\1/g\n", $1, $2)}' <pattern-file >sedscr

为模式文件cat sedscr运行此单行程序,然后您将获得:

s/C1\([^0-9]\)/C21\1/g
s/C2\([^0-9]\)/C22\1/g
s/C4\([^0-9]\)/C23\1/g
...

之后,使用生成的示例文件脚本运行sed。

sed -f sedscr sample-files...