用 sed 删除连字符

jk *_*ica 5 sed perl text-processing

我有一个简单的 xml 文件,其中包含一些分页符上的连字符。输入是这样的

 ba bla bla hyphe-</page>
 <page>nated bla bla bla
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的

 bla bla bla</page>
 <page>hyphenated bla bla bla
Run Code Online (Sandbox Code Playgroud)

我知道 sed 命令N,但我无法控制我的断字是出现在奇数行还是偶数行。

我可以使用 sed 执行上述 skteched 的连字符删除吗?是否有替代方法(例如使用其他 UNIX shell 命令或使用 python 或 perl)?

编辑。根据要求,我的输入文件中的一个真实示例:

[...] and vapours, upon the comparison of the air-thermo-</page>
<page>meter with the mercurial thermometer, upon the elastic [...]
Run Code Online (Sandbox Code Playgroud)

EDIT2:Alltho' 我相当随机地拿起了这个例子,它确实是一个非常讨厌的例子。在这种情况下想要的输出是

 [...] and vapours, upon the comparison of the</page>
<page>air-thermometer with the mercurial thermometer, upon the elastic [...]
Run Code Online (Sandbox Code Playgroud)

即使用空格作为单词分隔符。我的主要问题是编写一个跨越原始换行符的模式。是的,该模式应该只删除前面的连字符</page>

Jsh*_*ura 3

某种怪物)使用perl应该更容易

cat file
ba bla bla hyphe-</page>
<page>nated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla
Run Code Online (Sandbox Code Playgroud)

它是 GNU sed (在其他一些 sed -s -E 选项中用于扩展正则表达式)

sed -nr '/[[:alpha:]]+-<\/[[:alpha:]]+>$/{
N
s!([[:alpha:]]+)-(</[[:alpha:]]+>)\n(<[[:alpha:]]+>)([[:alpha:]]+)!\2\n\3\1\4!}
p' file
ba bla bla </page>
<page>hyphenated bla bla bla
and the output should look like

bla bla bla</page>
<page>hyphenated bla bla bla
Run Code Online (Sandbox Code Playgroud)