在sentinel字符串后提取引用的文本

时间:2013-03-05 21:11:43

标签: bash sed

我正在寻找一个sed配方,它将文件作为输入,并输出以下格式的每个匹配的空格分隔列表:

sentinel-string 'stuff-to-match'

例如,如果sentinel-string是“sentinel”且文件是:

sentinel 'match1' a random ' I don't know and maybe a sentinel 'match2' ''' test

我希望输出为: match1 match2

我一直在努力构建这个,我只是不熟悉实用工具来完成工作。

2 个答案:

答案 0 :(得分:2)

以这种方式尝试grep:

s="sentinel"  
 grep -Po "(?<=$s ')[^']*" inputFile|tr '\n' ' '

变量s存储模式字符串,在您的情况下,它是sentinel-string。

答案 1 :(得分:2)

Sed不是编辑线条的工具,但这里有一种方法:

sed -e "
  s/sentinel[ ]*/\n/g
  s/[^\n]*\n'\([^']*\)'[^\n]*/\1 /g
" infile

它是如何运作的?

s/sentinel[ ]*/\n/g

在要提取的单词之前插入换行符。所以输入就像:

<blank line>
'match1' a random ' I don't know and maybe a 
'match2' ''' test

并且

`s/[^\n]*\n'\([^']*\)'[^\n]*/\1 /g`

提取这些换行符之后的内容,删除其他所有内容。

它产生:

match1 match2