1

我有一个file.txt包含很长行的文件:

1|34|2012.12.01 00:08:35|12|4|921-*203-0000000000-962797807950|mar0101|0|00000106829DAE7F3FAB187550B920530C00|0|0|4000018001000002||962797807950|||||-1|||||-1||-1|0||||0||||||-1|-1|||-1|0|-1|-1|-1|2012.12.01 00:08:35|1|0||-1|1|||||||||||||0|0|||472|0|12|-2147483648|-2147483648|-2147483648|-2147483648|||||||||||||||||||||||||0|||0||1|6|252|tid{111211344662580792}pfid{10}gob{1}rid{globitel} afid{}uid1{962797807950}aid1{1}ar1{100}uid2{globitel}aid2{-1}pid{1234}pur{!GDRC RESERVE AMOUNT 10000}ratinf{}rec{0}rots{0}tda{}mid{}exd{0}reqa{100}ctr{StaffLine}ftksn{JMT}ftksr{0001}ftktp{PayCall Ticket}||

我只想打印这个文件中“ctr”之后的单词,即“StaffLine”,我不知道这个单词有多少个字符。

我试过了:

awk '{comp[substr("ctr",0)]{print}}'

但它没有用。我怎样才能掌握这个词?

4

4 回答 4

2

这是一种使用方法awk

awk -F "[{}]" '{ for(i=1;i<=NF;i++) if ($i == "ctr") print $(i+1) }' file

或者,如果您的版本grep支持类似 Perl 的正则表达式:

grep -oP "(?<=ctr{)[^}]+" file

结果:

StaffLine
于 2012-12-27T07:34:56.570 回答
1

使用 sed:

sed 's/.*}ctr{\([^}]*\).*/\1/' input
于 2012-12-27T07:43:46.137 回答
1

处理它的一种方法是sed

sed -e 's/.*}ctr{//; s/}.*//' file.txt

这将删除直到并包括{单词之后的所有内容ctr(避免任何ctr带有后缀的单词出现问题,例如假设pxctr{Bogus}条目);然后它从第一个剩余的}开始删除任何内容,只留下StaffLine样本数据。

于 2012-12-27T07:45:38.133 回答
0
perl -lne '$_=m/.*ctr{([^}]*)}.*/;print $1' your_file

测试如下:

> cat temp
1|34|2012.12.01 00:08:35|12|4|921-*203-0000000000-962797807950|mar0101|0|00000106829DAE7F3FAB187550B920530C00|0|0|4000018001000002||962797807950|||||-1|||||-1||-1|0||||0||||||-1|-1|||-1|0|-1|-1|-1|2012.12.01 00:08:35|1|0||-1|1|||||||||||||0|0|||472|0|12|-2147483648|-2147483648|-2147483648|-2147483648|||||||||||||||||||||||||0|||0||1|6|252|tid{111211344662580792}pfid{10}gob{1}rid{globitel} afid{}uid1{962797807950}aid1{1}ar1{100}uid2{globitel}aid2{-1}pid{1234}pur{!GDRC RESERVE AMOUNT 10000}ratinf{}rec{0}rots{0}tda{}mid{}exd{0}reqa{100}ctr{StaffLine}ftksn{JMT}ftksr{0001}ftktp{PayCall Ticket}||
> perl -lne '$_=m/.*ctr{([^}]*)}.*/;print $1' temp
StaffLine
> 
于 2012-12-27T09:03:31.363 回答