2

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

sentinel-string 'stuff-to-match'

例如,如果哨兵字符串是“哨兵”并且文件是:

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

我希望输出为:match1 match2

我一直在尝试构建它,但我对实用程序还不够熟悉,无法完成工作。

4

2 回答 2

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
于 2013-03-05T21:27:03.510 回答
2

以这种方式尝试grep:

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

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

于 2013-03-05T21:22:19.750 回答