我有一个简单的 xml 文件,其中包含一些分页符上的连字符。输入是这样的
ba bla bla hyphe-</page>
<page>nated bla bla bla
输出应该是这样的
bla bla bla</page>
<page>hyphenated bla bla bla
我知道 sed 命令N
,但我无法控制连字符是出现在奇数行还是偶数行。
我可以用 sed 按照上面的草图删除连字符吗?是否有替代方法(例如使用其他 UNIX shell 命令或使用 python 或 perl)?
编辑。根据要求,我的输入文件中的真实示例:
[...] and vapours, upon the comparison of the air-thermo-</page>
<page>meter with the mercurial thermometer, upon the elastic [...]
编辑2:虽然我相当随机地拿起了这个例子,但这确实是一个非常令人讨厌的例子。在这种情况下想要的输出是
[...] and vapours, upon the comparison of the</page>
<page>air-thermometer with the mercurial thermometer, upon the elastic [...]
即使用空格作为单词分隔符。对我来说,主要的问题是编写一个跨越原始换行符的模式。是的,该模式应该只删除前面的连字符</page>
答案1
Perl 中的 Oneliner(感谢 terdon!):
perl -0 -pe 's/\s+(\S+)-(<\/page>\s+<page>)(\S+)/$2$1$3/g' filename
它的作用:与正则表达式匹配,并使用匹配的部分来重建您的单词。
答案2
某种怪物)使用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
它是 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