XML ファイル (正確には Jira エクスポート ファイル) に対して正規表現を実行して、その中のいくつかの JQL クエリの問題を修正しようとしています。
「リクエスト」という属性を探しています。これにはクエリが含まれています。そのクエリでは、ユーザー名を引用符 ("quot;) の HTML エンティティでラップする必要があります。ユーザー名は常に文字列 "reporter = '、"assignee = "、または "watcher = " の後に続きます。 string currentUser() はユーザー名ではないため、置き換える必要はありません。
Original:
<SearchRequest id="10000" name="Example" author="myusername" user="myusername" request="reporter = anotheruser and status != Closed" favCount="1"/>
Result:
<SearchRequest id="10000" name="Example" author="myusername" user="myusername" request="reporter = "anotheruser" and status != Closed" favCount="1"/>
Search:
(request=".*?(reporter|assignee|watcher) = )(?!currentUser)([a-z.]+)(.*?")
Replace:
$1&$3&$4
これは SublimeText 2 およびRegex Tester 2で試行およびテストされており、正しく動作します。ご覧のとおり、先読みを使用して currentUser の否定的なケースを検出します。今、Sed でこの正規表現を使用しようとすると、エラーが発生します。
$ sed -i '' -E 's/(request=".*?(reporter|assignee|watcher) = )(?!currentUser)([a-z.]+)(.*?")/$1&$3&$4/g' entities.xml
sed: 1: "s/(request=".*?(reporte ...": RE error: repetition-operator operand invalid
sed は私にとって新しい領域であるため、今どのように進めればよいかわかりません。この問題を引き起こすのは先読みだと思う傾向があります。おそらく、この要件を満たす簡単な方法はありますか?