上で私は、単一のライン上のどこかに開始する複数の異なる:variablerolename:
部分がある場合もありますマッチパターンはおそらく改行のみ印刷パターン
:variablerolename:`text may span newline`
ためスフィンクス.rstのテキストファイルを検索しています。
ので、入力例として、私が持っている:
yada :role2:`texty text` yada :role:`text
line` yada filler
yada yada :role:`text of role` yada yada :role2:`start of text
rest of text`
more text :rolename:`Text after this role`
filler :otherrole:`This role
text` filler
は、私は限り
grep -P '(?s):[a-z].*:`.*`' filename
としてgottenをした。しかし、私は、これは適切に複数のマッチングされたとは思わないの答えを検索:役割:出力の1行が得られるので、行のブロックは
yada yada :role:`text of role` yada yada :role2:`start of text
ですが、それ以外のロール2終了までのテキストは、次の行には表示されません。
私が望む出力は、ロール名とバッククォートされたテキストだけで、各インスタンスは1行にあり、プレテキストとポストテキストはありません。だから、のようなもの:私は|sort|uniq
へでこの出力を渡すことになります
:role2:`texty text`
:role:`text line`
:role:`text of role`
:role2:`start of text rest of text`
:rolename:`Text after this role`
:otherrole:`This role text`
ので、単一の行が必要です。
私はRHEL 6.7で利用できるものを使用することに限定されてる(
- GNUのbashのは、バージョン4.1.2
- GNU Awkの3.1.7
- はgrep(ので、最新の機能が使用できない可能性があります) GNUのgrepの)2.20
- GNU sedのバージョンそれはあなたの質問から明らかではないのですが、これは何が必要かもしれ4.2.1
:出力のみのユニークな値に
'awk'を使って' RS'を設定した場合、あなたはもっと簡単な時間を取るかもしれません':'。それでも、引用符で囲まれたテキストを取り出して* previous *レコードにマッピングする必要がありますが、それは実行可能でなければなりません。 –
あなたがしようとしていることを言うのは難しいです。あなたの質問を編集して、簡潔でテスト可能なサンプル入力とその入力が与えられた場合の期待出力、すなわち[mcve]を投稿してください。今のところ、いくつかの不明瞭な例があるようです。 –
あなたはそうです。ごめんなさい。それをきれいにしようとしました。 – Torfey