Unix - sed在第一次冒号后从一行获取值

时间:2016-05-11 21:22:37

标签: unix awk sed grep cut

我有一个包含以下行

的文件(newline.txt)
Footer - Count: 00034300, Facility: TRACE, File Created: 20160506155539

我试图从此行获取Count:之后的值到逗号(在示例中为00034300)。

我尝试了这个,但我得到的是所有数字用该命令连接成一个大字符串:

grep -i "Count:" newfile.txt | sed 's/[^0-9]//g'

输出:0003430020160506155539 ​​

如何获得Count:之后的数字直到第一个非数字字符?

我只需要00034300。

1 个答案:

答案 0 :(得分:3)

使用sed

$ sed '/[Cc]ount/ s/[^:]*: *//; s/,.*//' newline.txt 
00034300

工作原理:

  • /[Cc]ount/选择包含Countcount的行。这消除了对grep

  • 的需求
  • s/[^:]*: *//删除第一个冒号内的所有内容,包括冒号后的任何空格。

  • 在剩下的内容中,s/,.*//会删除第一个逗号后的所有内容。

使用awk

$ awk -F'[[:blank:],]' '/[Cc]ount/ {print $4}' newline.txt 
00034300

工作原理:

  • -F'[[:blank:],]'告诉awk将空格,制表符和逗号视为字段分隔符。

  • /[Cc]ount/选择包含Countcount的行。

  • print $4打印所选行上的第四个字段。

使用grep

$ grep -oiP '(?<=Count: )[[:digit:]]+' newline.txt 
00034300

这将查找Count:之后的任何数字并打印它们。