我正在寻找一个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
我一直在努力构建这个,我只是不熟悉实用工具来完成工作。
答案 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