我正在寻找一个 sed 配方,它将文件作为输入并输出以下形式的每个匹配项的空格分隔列表:
sentinel-string 'stuff-to-match'
例如,如果哨兵字符串是“哨兵”并且文件是:
sentinel 'match1' a random ' I don't know and maybe a sentinel 'match2' ''' test
我希望输出为:match1 match2
我一直在尝试构建它,但我对实用程序还不够熟悉,无法完成工作。
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
以这种方式尝试grep:
s="sentinel"
grep -Po "(?<=$s ')[^']*" inputFile|tr '\n' ' '
变量s
存储模式字符串,在您的情况下,它是哨兵字符串。