Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix-sed从第一个冒号后的行获取值_Unix_Awk_Sed_Grep_Cut - Fatal编程技术网

Unix-sed从第一个冒号后的行获取值

Unix-sed从第一个冒号后的行获取值,unix,awk,sed,grep,cut,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

我有一个文件(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。

使用sed 工作原理:

  • /[Cc]ount/
    选择包含
    Count
    Count
    的行。这样就不需要
    grep

  • s/[^::]*:*/
    删除第一个冒号之前的所有内容,包括冒号后面的所有空格

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

使用awk 工作原理:

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

  • /[Cc]ount/
    选择包含
    计数
    计数
    的行

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

使用grep
$grep-oiP'(?您永远不需要将
grep
的输出传输到
sed
,因为
sed
可以做任何事情
grep
可以。非常感谢John。这很有效。:)
$ sed '/[Cc]ount/ s/[^:]*: *//; s/,.*//' newline.txt 
00034300
$ awk -F'[[:blank:],]' '/[Cc]ount/ {print $4}' newline.txt 
00034300
$ grep -oiP '(?<=Count: )[[:digit:]]+' newline.txt 
00034300