匹配模式后插入字段

时间:2014-02-23 03:24:49

标签: perl sed awk

我想在文件中搜索特定模式,然后将字段插入到具有匹配模式的行中。例如,我想搜索模式HELLO,然后在第二个NEW之后插入一个单词,

infile.txt

HELLO (A0[], B0[],C0,D0, E0)
HELLO (A1[], B1[],C1,D1, E1)
...
HELLO (Aj[], Bj[],Cj,Dj, Ej)

outfile.txt应为:

HELLO (A0[], B0[], NEW, C0,D0, E0)
HELLO (A1[], B1[], NEW, C1,D1, E1)
...
HELLO (Aj[], Bj[], NEW, Cj,Dj, Ej)

感谢

7 个答案:

答案 0 :(得分:2)

以下产生您想要的输出:

perl -pe 's/^HELLO.+?,.+?,\K/ NEW, /' infile.txt > outfile.txt

Hopt有帮助!

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed '/HELLO/s/,/, NEW,/2' file

答案 2 :(得分:2)

perl -pe 's|HELLO(.+?,){2}\K| NEW, |' file

输出

HELLO (A0[], B0[], NEW, C0,D0, E0)
HELLO (A1[], B1[], NEW, C1,D1, E1)
HELLO (Aj[], Bj[], NEW, Cj,Dj, Ej)

答案 3 :(得分:1)

根据您更新的问题进行更新。

$ cat infile.txt
HELLO (A0[], B0[],C0,D0, E0)
HELLO (A1[], B1[],C1,D1, E1)
HELLO (A2[], B1[],C2,D2, E2)
HELLO (A3[], B3[],C3,D3, E3)
HELLO (A4[], B4[],C4,D4, E4)
HELLO (A5[], B5[],C5,D5, E5)

$ sed -i '' '/^HELLO/s/\(B[0-9]\[]\),/\1, NEW, /' infile.txt

$ cat infile.txt
HELLO (A0[], B0[], NEW, C0,D0, E0)
HELLO (A1[], B1[], NEW, C1,D1, E1)
HELLO (A2[], B1[], NEW, C2,D2, E2)
HELLO (A3[], B3[], NEW, C3,D3, E3)
HELLO (A4[], B4[], NEW, C4,D4, E4)
HELLO (A5[], B5[], NEW, C5,D5, E5)

答案 4 :(得分:1)

您可以尝试此awk

awk -F, '/HELLO/{ $3=" NEW, "$3;}1' OFS=, infile.txt > outfile.txt

答案 5 :(得分:1)

这个sed应该照顾好所有人:

cat file
HELLO (A0[], B0[],C0,D0, E0, G0[])
HELLO (A1[], B1[],C1,D1, E1, G1[])
...
HELLO (A122[], B122[],C122,D122, E122, G122[])
HELLO (A32C[], B32C[],C32C,D32C, E32C, G32C[])
HELLO (Aj[], Bj[],Cj,Dj, Ej, Gj[])

sed '/^HELLO/s/B[^[]*\[\],/& NEW, /' file
HELLO (A0[], B0[], NEW, C0,D0, E0, G0[])
HELLO (A1[], B1[], NEW, C1,D1, E1, G1[])
...
HELLO (A122[], B122[], NEW, C122,D122, E122, G122[])
HELLO (A32C[], B32C[], NEW, C32C,D32C, E32C, G32C[])
HELLO (Aj[], Bj[], NEW, Cj,Dj, Ej, Gj[])

它适用于B之后的任何数字或字母,例如B122 B12AB等 非贪婪[^[]*对我们来说比.*更好,因为如果有其他括号,例如G1[]

,它会失败

答案 6 :(得分:0)

尝试类似:

sed '/^HELLO/s/B[0-9a-zA-Z]\+\[\],/& NEW, /' file

$ cat file
HELLO (A0[], B0[],C0,D0, E0)
HELLO (A1[], B1[],C1,D1, E1)
HELLO (Aj[], Bj[],Cj,Dj, Ej)

sed '/^HELLO/s/B[0-9a-zA-Z]\+\[\],/& NEW, /' file
HELLO (A0[], B0[], NEW, C0,D0, E0)
HELLO (A1[], B1[], NEW, C1,D1, E1)
HELLO (Aj[], Bj[], NEW, Cj,Dj, Ej)