2

ファイルを入力として受け取り、次の形式のすべての一致のスペースで区切られたリストを出力する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

私はこれを少しの間構築しようとしてきましたが、仕事を成し遂げるのに十分なユーティリティに精通していません。

4

2 に答える 2

2

この方法でgrepを試してください:

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

変数sはパターン文字列を格納します。あなたの場合、それは番兵文字列です。

于 2013-03-05T21:22:19.750 に答える
2

Sedは行を編集するためのツールではありませんが、ここでは1つの方法があります。

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 に答える