优化sed命令以获得更好的性能

时间:2016-02-04 17:03:23

标签: linux bash sed

我在文件中有以下几行:

1231231213123123123|W3A|{ (ABCDE)="8=3AF.R.Y2=133AA=9WW=334MNFN=20120925-22:23:59.998
1231231213123123123|4GM|{ (ABCDE)="8=3AF.R.Y2=123AA=9WW=4AF013DCV=EXAMPLE=ABC
1231231213123123123|KYC|{ (ABCDE)="8=3AF.R.Y2=112AA=9WW=0002DDS=20120921-14:55:21

为了获得“|”之间的值我正在使用的字符:

sed -e 's/\(^.*|\)\(.*\)\(|.*$\)/\2/'

输出是:

W3A
4GM
KYC

预期。但由于文件有数千条记录,sed命令需要花费大量时间。有没有办法改善这个命令的性能?

2 个答案:

答案 0 :(得分:4)

对我来说就像你只想用cut:

cut -d '|' -f 2 file

将分隔符设置为|并打印第二个字段。

答案 1 :(得分:0)

由于你只保留了第二个括号内的组,你通过记住其他东西让你做了不必要的工作。尝试

sed -e 's/^[^|]*|\([^|]*\)|.*/\1/'
但是汤姆·费内奇的答案应该快得多。