使用grep,sed等获取特定数据,但它不起作用

时间:2013-04-03 03:00:48

标签: bash shell sed grep

我正在使用此命令:

pdftotext statement.pdf - | grep -m 1 "Provider" | sed -n "/Provider/,/Amount/p"

该文件包含以下行:

Patient Jane Person Date 01/01/13 Provider John Q Doctor Amount $100

我想要的是命令返回“John Q Doctor” - 基本上是提供者和单词Amount之间的任何内容。

但是,当我运行该命令时,我得到的只是整行 - 而不仅仅是字符串“John Q Doctor”。我做错了什么?

3 个答案:

答案 0 :(得分:2)

使用sed:

sed 's/.*Provider\(.*\)Amount.*/\1/'

使用Grep(GNU):

grep -oP '(?<=Provider).*(?=Amount.*)'

答案 1 :(得分:1)

sed range命令适用于整个匹配行,如果它们位于同一行,请尝试此操作:

pdftotext statement.pdf - | grep -m 1 "Provider" | 
     sed -n "s/Provider\(.*\)Amount/\1/p"

答案 2 :(得分:0)

 sed -n '/Provider/{s/.*Provider\(.*\)Amount.*/\1/p;q}'

这应该有效+