У меня есть следующий код xml:
<?xml version="1.0" encoding="UTF-8"?><d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
<d:entry id="_2udw" d:title="roughshod"><d:index d:value="roughshod" d:title="roughshod"/><span class="hw">roughshod</span><br/><span class="tag3">a.</span><br/><span class="table"><span class="num">1.</span><span class="tag4"></span><span class="tag1">(马匹)</span>钉有防滑蹄铁的</span><span class="table"><span class="num">2.</span>残暴的;残忍的;无情的:</span><span class="ex">a tyrant's ~ rule </span><span class="ex_c">暴君的残暴统治</span><hr class="hr_1"/>ride ~ over / 残暴地<span class="tag1">(或盛气凌人地)</span>对待;对…横行霸道;对…不予同情:<br/><span class="ex">ride ~ over the people </span><span class="ex_c">骑在人民头上作威作福</span><span class="ex">ride ~ over the rights of the children </span><span class="ex_c">践踏儿童的权利</span><span class="ex">ride ~ over sb.'s feelings </span><span class="ex_c">伤害某人的感情</span><span class="ex">The boss rode ~ over the men when they asked for higher wages. </span><span class="ex_c">工人们要求加薪,老板不予理睬。</span></d:entry>
<d:entry id="_2u05" d:title="rookie"><d:index d:value="rookie" d:title="rookie"/><span class="hw">rookie</span><br/><span class="tag3">n.</span><br/><span class="tag4"></span><br/><span class="table"><span class="num">1.</span>新兵;生手,新手:</span><span class="ex">a police ~ </span><span class="ex_c">警察新手</span><span class="ex">a ~ star </span><span class="ex_c">新星</span><span class="table"><span class="num">2.</span><span class="tag1">(第一年参加联赛的职业球队的)</span>新队员,新秀</span><span class="tag2"><br/>[词典校勘] <br/></span> <span>rookie现在通用翻译为“新秀”。 另外,括号中说法有歧义。</span></d:entry></d:dictionary>
Теперь я хотел бы заменить все ~ во фрагменте кода на заголовок соответствующей записи.
Ожидаемые результатыследующим образом:
<?xml version="1.0" encoding="UTF-8"?><d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
<d:entry id="_2udw" d:title="roughshod"><d:index d:value="roughshod" d:title="roughshod"/><span class="hw">roughshod</span><br/><span class="tag3">a.</span><br/><span class="table"><span class="num">1.</span><span class="tag4"></span><span class="tag1">(马匹)</span>钉有防滑蹄铁的</span><span class="table"><span class="num">2.</span>残暴的;残忍的;无情的:</span><span class="ex">a tyrant's roughshod rule </span><span class="ex_c">暴君的残暴统治</span><hr class="hr_1"/>ride roughshod over / 残暴地<span class="tag1">(或盛气凌人地)</span>对待;对…横行霸道;对…不予同情:<br/><span class="ex">ride roughshod over the people </span><span class="ex_c">骑在人民头上作威作福</span><span class="ex">ride roughshod over the rights of the children </span><span class="ex_c">践踏儿童的权利</span><span class="ex">ride roughshod over sb.'s feelings </span><span class="ex_c">伤害某人的感情</span><span class="ex">The boss rode roughshod over the men when they asked for higher wages. </span><span class="ex_c">工人们要求加薪,老板不予理睬。</span></d:entry>
<d:entry id="_2u05" d:title="rookie"><d:index d:value="rookie" d:title="rookie"/><span class="hw">rookie</span><br/><span class="tag3">n.</span><br/><span class="tag4"></span><br/><span class="table"><span class="num">1.</span>新兵;生手,新手:</span><span class="ex">a police rookie </span><span class="ex_c">警察新手</span><span class="ex">a rookie star </span><span class="ex_c">新星</span><span class="table"><span class="num">2.</span><span class="tag1">(第一年参加联赛的职业球队的)</span>新队员,新秀</span><span class="tag2"><br/>[词典校勘] <br/></span> <span>rookie现在通用翻译为“新秀”。 另外,括号中说法有歧义。</span></d:entry></d:dictionary>
В редакторе Sublime с небольшой частью XML-файла я мог бы заменить (. d: value = ") ([^ \ n] ?)("[^ \ n] *?) ([~~]) с \ 1 \ 2 \ 3 \ 2 для достижения этой цели (хотя мне нужно сделать это несколько раз, чтобы заменить все ~).Но весь XML-файл слишком велик для редактора, чтобы заменить его, редактор просто завис.Поэтому я рассматриваю возможность использования команды sed.Я пробовал следующее:
sed -i "" -E 's|(.*d:value=\")([^\n]*?)(\"[^\n]*?)([~~])|\1\2\3\2|g' test.xml
Но это дает мне такие ошибки, как «RE error: оператор оператора повторения недействителен».Это первый раз, когда я пробую команду sed.
Я не знаю, отличается ли регулярное выражение в команде sed или чем-то еще.Я пытался в течение нескольких дней.Любая помощь будет принята с благодарностью.Спасибо.
О, и я на платформе Mac OS.