1

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 = &quot;anotheruser&quot; and status != Closed" favCount="1"/>

 Search:
 (request=".*?(reporter|assignee|watcher) = )(?!currentUser)([a-z.]+)(.*?")

 Replace:
 $1&amp;$3&amp;$4

これは SublimeText 2 およびRegex Tester 2で試行およびテストされており、正しく動作します。ご覧のとおり、先読みを使用して currentUser の否定的なケースを検出します。今、Sed でこの正規表現を使用しようとすると、エラーが発生します。

$ sed -i '' -E 's/(request=".*?(reporter|assignee|watcher) = )(?!currentUser)([a-z.]+)(.*?")/$1&amp;$3&amp;$4/g' entities.xml
sed: 1: "s/(request=".*?(reporte ...": RE error: repetition-operator operand invalid

sed は私にとって新しい領域であるため、今どのように進めればよいかわかりません。この問題を引き起こすのは先読みだと思う傾向があります。おそらく、この要件を満たす簡単な方法はありますか?

4

1 に答える 1

2

残念ながら、先読み/後読みはサポートされていません。(super sed)sedで多くのことを行う必要があります。さらに詳しい情報が必要な場合ssedは、こちらのFAQをご覧ください。

また、これはperlあなたがよく知っている場合に行うことができますが、私はそうではありません(私は たので、助けが必要です)。

-Pでオプションを使用するとgrep、一致が検証されます。

$ grep -Po '(request=".*?(reporter|assignee|watcher) = )(?!currentUser)([a-z.]+)(.*?")' <<< '<SearchRequest id="10000" name="Example" author="myusername" user="myusername" request="reporter = anotheruser and status != Closed" favCount="1"/>'
request="reporter = anotheruser and status != Closed"
于 2013-01-04T10:08:54.967 に答える